Строительная строка в С
Я начинающий с 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 AABA AABB. , .так далее
Может кто-нибудь сказать мне, где я совершил ошибку? Я работаю с Java, где этот алгоритм работает хорошо, поэтому у меня есть только проблемы с другим языком. большое спасибо
1 ответ
Решение
Используя все комментарии, я собрал версию программы, которая работает:
#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);
}
}