c - 从字符串中删除子字符串

标签 c string

当我运行这个程序时,我引入了例如字符串 Ana are mere 和子字符串 are。结果字符串是 Ana mereere,而不是 Ana mere。你能告诉我为什么吗?

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
char *str_rem(char *sir, char *subsir) 
{
    int i, j,k;
    int loc = -1; //subsirul nu a fost gasit(presupunem)
    for (i = 0; sir[i] && (loc==-1);i++)
    for (j = i, k = 0; sir[j] == subsir[k];j++,k++)
    if (subsir[k + 1] == 0) loc = i;
    if (loc != -1) //subsirul a fost gasit
    {
        for (k = 0; subsir[k]; k++)
            ; //bucla nu face nimic!! dorim sa obtinem cate elemente are subsirul
        printf("\nSubsirul este format din %d elemente\n", k);
        for (j = loc, i = loc + k; sir[i]; j++, i++)
            sir[j] = sir[i];
        sir[i] = '\0';

    }
    return (sir);
}
void main()
{
    char *sir;
    sir = (char*)malloc(255*sizeof(char));
    printf("Introduceti sirul: ");
    gets(sir);
    char *subsir;
    subsir = (char*)malloc(255 * sizeof(char));
    printf("Introduceti subsirul care doriti sa fie cautat: ");
    gets(subsir);
    printf("Sirul %s rezultat dupa stergerea subsirului %s este: %s\n", sir, subsir, str_rem(sir, subsir));
    _getch();
}

最佳答案

线

sir[i] = '\0'

应该是

sir[j] = '\0'

关于c - 从字符串中删除子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30544638/

相关文章:

c++ - make 文件中的 ".target-name"目标会始终运行吗?

使用指针的 C 语言程序动态表

c - Valgrind 的无效写入

c - 正确播种 rand_r(int *val) 方法

java - 尝试在 map 中设置字符串时出现 WRONGTYPE 异常 (jedis)

c# - 不区分大小写比较字符串和非字符串

php - 从两个单词的字符串中获取第一个字母(PHP - 最快的方法)

c - Nanomsg TCP 握手

java - 按频率排序字符串数组的最有效方法

string - Go 编译器是否连接由加号分隔的字符串?