在C中添加带递归函数的字符串

时间:2014-06-06 17:36:38

标签: c string recursion concatenation

我需要在C中编写一个probram,它会在字符串等中添加一个字符串(例如' 5'字符串 - 它需要读取" vbvbvbvbvb" 5次。)但它不起作用?求救!

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

char s[80];
int len;
int counter = 0;

char* repeat(char* s, int n) {

    if (n > 0) {
        if (s[len] == n) {
            counter++;
        }
        len--;
        repeat(s, (n++));
    }
    return s;
}

int main(void) {
    printf("%s", repeat("vb", 5));
    fflush(stdout);
    return EXIT_SUCCESS;
}

2 个答案:

答案 0 :(得分:1)

您正在尝试写入"vb"的末尾,这是常量池中的字符串。不要那样做。分配一个strlen(s) * n + 1长的字符串并写入该字符串。

您的基本情况可能是错误的。基本情况可能应该是n == 0时,空字符串(除了终止NUL之外没有附加任何内容)是合适的。

您的递归步骤(n++)可能应该(n - 1)倒数到该基本情况。如上所述,后增量执行无用的赋值和递归,具有相同的n值。

我不知道counterlen应该做什么,但它们看起来多余。 len未初始化,因此s[len]具有未定义的行为。

在编写n份副本后,您需要在末尾添加终止NUL('\0'),以便printf和类似功能可以识别结尾。

答案 1 :(得分:0)

您正在使用s作为全局变量和局部变量,该函数正在本地工作。 尽量不要在没有必要的地方使用全局变量。此外,不需要递归。

#include <stdio.h>

void concatenate_string(char *dest, const char *src, int n) {

    char *s;
    while(n--) {
        s = (char*)src;
        while(*(s))
            *(dest++)=*(s++);           
    }
    *(dest++) = 0;
}

int main(void) {
    char out[80];

    concatenate_string(out, "ab", 5);
    printf("%s", out);

    return 0;
}