c - C中字符串的所有可能组合

标签 c string

我正在尝试使用 C 打印字符串“abc”的所有可能组合。有人可以帮助指出我在这段代码中哪里出错了吗?我正在使用这里提到的算法: http://hackercs.com/videos/Combinations-of-a-String-Part-2/ 感谢您的时间和帮助。 (顺便说一句,这里的目标是使用递归)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>


 void combination(char **curString,int allowedStart,char **outBuffer,int length)
{
//check for allowed chars.
// if not return.
// else
// for each char in the allowed char
// copy into buffer
//print buffer
//combine buffer and over next allowed chars
//remove from buffer.

if (allowedStart == length)
    return;
else    
   {
int curr;
for (curr = allowedStart;curr<length; curr++){
//need to copy 'a' into outbuffer and keep appending to outbuffer.
printf("allowedStart = %d\n",allowedStart);
printf("curr = %d\n",curr);

(*outBuffer)[curr] = (*curString)[allowedStart];
printf("outbuff is %s\n",*outBuffer);       

combination(curString,curr+1,outBuffer,length);
    printf("return\n");
(*outBuffer)[length-1] = '\0';

   } //else
} //for 
}

 main()
 {
 char *var = "abc";
 int length = strlen(var);
 printf("length = %d\n",length);

 char *outBuffer = malloc ( length * sizeof (char));
 bzero(outBuffer,3);
 combination(&var,0,&outBuffer,length);

  }

最佳答案

对于初学者来说,你在这里错了:

 char *var = "abc";
 int length = strlen(var);
 printf("length = %d\n",length);

 char *outBuffer = malloc ( length * sizeof (char));
 bzero(outBuffer,3);

这是非常困惑的代码。它混合了动态缓冲区长度处理(strlen() 调用)和静态缓冲区长度处理(bzero() 调用中的 3)。它也做错了,通过使用 sizeof (char)(C 语言保证为 1,因此只会增加噪音和困惑)。此外,在 C 中保存 3 个字符的可打印字符串所需的字符数不是 3 个,而是 4 个,因为您需要一个字符来终止 '\0'

关于c - C中字符串的所有可能组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7441571/

相关文章:

java - 是否可以评估用于字符串比较的 boolean 表达式?

c - C 中的第一类标签?

c - 在文件操作中使用 strcat 时如何修复段错误(核心转储)

c - 简单的弹性程序

c - 如何在 C 中拆分 HTTP header ?

c - 使用它自己的调用作为函数调用语句中的参数之一

python - 检测空格并应用于变量

string - 使用 Lua 从 URL 获取文件名

c# - 从使用某些指定字符括起来的字符串中获取子字符串

C++ 自定义模板 LinkedList 崩溃添加 std::string