从C中的字符串中删除字符

时间:2015-05-07 10:23:35

标签: c string memcpy

我在删除字符串中的字符时遇到问题。我已经能够识别要删除的字符并将它们存储为新字符串但是我想要一个代码,使我能够从原始字符串中删除新字符串的字符(我将其标记为xxxxxxxx )。

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

char input[120], to_del[120], new_input[120];
int a,b;


void removeString();

int main(void)
{
    printf("\nEnter your sentence: ");
    gets(input);

    printf("\nWhere to start: ");
    scanf("%d",&a);
    printf("\nHow many characters to delete: ");
    scanf("%d",&b);

    removeString();

    printf("\nNew sentence: %s\n",new_input);

    return ;
}

void removeString()
{
    memcpy(to_del, &input[a-1], b);
    new_input [strlen(input)-b] =xxxxxxxx;
    return ;
}

3 个答案:

答案 0 :(得分:0)

您可以采取以下方法

  1. 0的索引a-1复制到input的{​​{1}}
  2. 从索引new_input复制到a+b-1input
  3. 最后,您的new_input会移除位置new_inputa之间的所有值。

    注意:

    1. 使用b是危险的。请改用gets()
    2. 您无法使用c中的fgets() 分配字符串。您需要使用= / strcpy()
    3. 复制字符串包含

答案 1 :(得分:0)

编辑回应@SouravGhosh评论,关于重叠字符串。首先,我将字符串复制到new_input,然后将右侧部分复制回input以覆盖必须删除的部分。

int len = strlen(input);
strcpy(new_input, input);
if (a < len && a+b <= len)
    strcpy (input + a, new_input + a + b);

我注意到你的其他代码没有检查任何正确的内容,例如来自scanf的返回值,请注意gets是危险的:最好使用{{1与fgets

stdin指令将字符串的右侧部分复制到要删除的部分上。它通过使用指针算法工作。将strcpy添加到a与获取input的地址相同,即您希望删除的位置。类似input[a]是您希望保留的右手部分的开始。

new_input[a+b]条件的要点是,如果if不在字符串中,或​​者如果要删除的部分溢出字符串的末尾,则无法完成。

答案 2 :(得分:0)

void removeString(void);

int main(void){
    printf("\nEnter your sentence: ");
    scanf("%119[^\n]%*c", input);

    printf("\nWhere to start(1 origin): ");
    scanf("%d", &a);
    printf("\nHow many characters to delete: ");
    scanf("%d", &b);

    removeString();

    printf("\nOriginal sentence: %s\n", input);
    printf("\nNew sentence: %s\n", new_input);
    printf("\nLabelled sentence: %s\n", to_del);

    return 0;
}

void removeString(void){
    strcpy(new_input, input);
    memmove(&new_input[a-1], &new_input[a -1 + b], strlen(&new_input[a -1 + b])+1);

    strcpy(to_del, input);
    memset(&to_del[a-1], 'x', b);
}