这是一个家庭作业,但我的输出不正确。赋值是使用递归重复单词'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èQstring
虽然它应该是stringstringstring
非常感谢任何帮助。
答案 0 :(得分:4)
你太复杂了。就这样做:
void repeat(char* s,int n){
printf("%s", s);
if(n > 1)
repeat(s, n-1);
}
int main(void) {
printf("Result: ");
repeat("string", 3);
fflush(stdout);
return (EXIT_SUCCESS);
}
答案 1 :(得分:2)
主要问题是您申请temp
的{{1}}未初始化。最后一个递归步骤中的strcat
是另一个新分配的temp
,并在strcat
的第二个参数中使用。
除此之外,已经注意到缓冲区太小了。
对替代解决方案的粗略建议(未经测试)
// a recursively called function
char* repeat_rec(char* dest, char* s,int n) {
if (n == 1) {
strcpy(dest, s);
return dest;
}
else{
return strcat(repeat_rec(dest, s, n-1), s);
}
}
// a main part containing initialization (avoids too many allocs)
char* repeat(char* s,int n) {
int len = strlen(s);
char* dest = (char*)malloc((n*len + 1)*sizeof(char));
return repeat_rec(dest, s, n);
}
答案 2 :(得分:0)
#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;
}