将字符数组的一部分复制到C中的另一个数组

时间:2013-11-05 18:04:04

标签: c arrays string

所以我一直试图解决以下问题无济于事:

  

编写一个名为removeString的函数,从字符串中删除指定数量的字符。该函数应该包含三个参数:源字符串,源字符串中的起始索引号以及要删除的字符数。因此,如果数组文本包含字符串“错误的儿子”,则调用

     

removeString(text,4,6);

     

具有从数组文本中删除字符“错误”(单词“错误”加上后面的空格)的效果。文本中生成的字符串就是“儿子”。

我已经尝试查找其他解决方案,但所有这些都使用memcpy函数,我想避免使用它,因为它还没有在我的书中介绍过,我宁愿不“欺骗系统“可以这么说。”

我的removeString函数如下:

void removeString (char text[], int x, int y)
{
    char output[81];
    int i, z = 0;

    for ( i = 0; (i <= 81); i++) {

        if (z < (x-1) || z > (x+y-1) ) {
            output[z] = text[z];
            //printf("%i\n", z);
            z++;
        } else {
            z++;
        }

    }

}

int main(void)
{
    char s1[81] = "the wrong son";
    int startPoint = 4, runLength = 6;

    removeString(s1, startPoint, runLength);

    printf("The new text is as follows:\n");
    printf("%s\n", s1);

    return 0;
}

当我打印出“z”的值时,我发现它正在跳过数字,但出于某种原因,它似乎将text[]全部复制到output[]

2 个答案:

答案 0 :(得分:3)

这将对原始字符串

起作用
for (;text[x];x++)
{
  text[x]=text[x+y];
}

答案 1 :(得分:1)

           output[z] = text[z];

这意味着新数组中的每个元素都与原始数组中的元素相同。此外,您需要将输出作为参数而不是在本地声明:

void removeString (char text[], char output[], int x, int y)
{
    for(int i = 0; i < x; i++)
        output[i] = text[i];

    for (int i = y; text[i] != '\0'; i++)
        output[i - (y - x)] = text[i];

}

int main(void)
{
    char s1[81] = "the wrong son";
    char output[81];
    int startPoint = 4, runLength = 6;

    removeString(s1, output, startPoint, runLength);

    printf("The new text is as follows:\n");
    printf("%s\n", s1);

    return 0;
}