这是一个家庭作业,但我被一个错误的输出卡住了。分配的任务是重复单词“s”,使用递归的次数是“n”。我不知道我是否遗漏了一些显而易见的东西,或者我走错了方向。这是我到目前为止的代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char* repeat(char* s,int n){
int len = strlen(s);
char* temp = (char*)malloc(n*len*sizeof(char));
if(n == 1){
strcpy(temp,s);
return (temp);
}
else{
//temp = (char*)realloc(temp, n*len*sizeof(char));
return (strcat(temp, repeat(s, n-1)));
}
}
int main(void) {
char* s = repeat("string", 3);
printf("Result: "); fflush(stdout);
puts(s);
return (EXIT_SUCCESS);
}
我得到的结果是:结果:Ø
QèQ字符串
而它应该是stringstring
任何帮助都非常感谢。
最佳答案
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char *repeat(char *s, int n){
int len = strlen(s);
char *temp;
if(n == 1){
temp = malloc(len + 1);
memcpy(temp, s, len + 1);
return temp;
}
temp = repeat(s, n-1);
temp = realloc(temp, n * len + 1);
memcpy(temp + (n-1)*len, temp, len + 1);
return temp;
}
int main(void) {
char* s = repeat("string", 3);
printf("Result: "); fflush(stdout);
puts(s);
free(s);
return (EXIT_SUCCESS);
}
//Simplification
char *repeat(char *s, int n){
if(n == 0){
return NULL;
}
int len = strlen(s);
char *temp = realloc(repeat(s, n-1), n * len + 1);
memcpy(temp + (n-1)*len, s, len + 1);
return temp;
}