【问题标题】:Building String in C在 C 中构建字符串
【发布时间】:2016-08-23 14:47:30
【问题描述】:

我是 C 的初学者,我想从给定的字符串中重复所有可能的字符串(最大长度为 8)。我对指针有点绝望。我有这个代码(输入例如“abcd”):

void permute(char *str, char *p_ch, int length);

int main() {
   input = malloc(8 * sizeof(char));
   fgets(input, 11, stdin);
   int n = strlen(input);
   permute(NULL, NULL, n);
   return 0;
}
void permute(char *str, char *p_ch, int len) {
   if (str == NULL) {
      char str[len];
      *p_ch =&str[0];
      permute(str, p_ch, len);
      return;
   }
   if (strlen(str) != len) {
       for (int i = 0; i < len; i++) {
           *p_ch = input[i];
           permute(str, (p_ch + 1), len);
       }
   }
   else {
       printf("%s", str);
   }

}

所以我想要的输入是: AAAA AAAB AAAC AAAD 亚巴 AABB . . .etc

谁能告诉我哪里出错了?我使用java,这个算法运行良好,所以我只有不同语言的问题。非常感谢

【问题讨论】:

  • 那些不是排列。你确定你完全理解这个问题吗?
  • 它是什么?这是给定输入字符串@iharob的所有可能排列
  • 所有可能的排列是abcdacdbadcb ...等等。不要重复字符。
  • 对不起,我的错误,我想从给定的输入中重复所有可能的字符串
  • 你需要先在纸上解决问题。这不是我想解决的问题。然而,看到解决方案会非常有趣。

标签: c string pointers recursion permutation


【解决方案1】:

使用所有的 cmets,我组装了一个可以工作的程序版本:

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

void permute(char *str, char *p_ch, int length);

char* input;

int main() {
    input = malloc(8+1 * sizeof(char));
    fgets(input, 9, stdin);
    int n = strlen(input);
    if(input[n-1] == '\n')n--;//remove newline if fgets included it
    permute(NULL, NULL, n);
    return 0;
}
void permute(char *str, char *p_ch, int len) {
    if (str == NULL) {
        str = malloc(len+1);
        memset(str,0,len+1);
        p_ch = &str[0];
        permute(str, p_ch, len);
        free(str);
        return;
    }
    if (strlen(str) != len) {
        for (int i = 0; i < len; i++) {
            *p_ch = input[i];
            p_ch[1] = 0;
            permute(str, (p_ch + 1), len);
        }
    }
    else {
        printf("%s ", str);
    }
}

【讨论】:

    猜你喜欢
    • 2013-12-11
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 2015-02-06
    • 2014-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多