从 C 中的字符串中删除子字符串的更简洁方法

标签 c string substring memmove

我有以下字符串 ID is a sample string remove to/0.10,我想以以下结尾:ID/0.10

这是我想出来的。但是,我正在寻找一种更清洁/更好的方法来执行此操作。

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

int main ()
{
    char str[] = "ID is a sample string remove to /0.10";
    char *a = strstr(str, "ID");
    char *b = strrchr (str, '/');
    if (a == NULL)
        return 0;
    if (b == NULL)
        return 0;

    int p1 = a-str+2;
    int p2 = b-str;
    int remL = p2 - p1;
    int until = (strlen(str) - p1 - remL) +1;

    memmove (str+p1, str+(p1+remL), until);
    printf ("%s\n",str);
    return 0;
}

最佳答案

确定ab 后,您可以像这样简化memmove:

char str[] = "ID is a sample string remove to /0.10";
char *a = strstr(str, "ID");
char *b = strrchr (str, '/');
if ((a == NULL) || (b == NULL) || (b < a))
    return 0;

memmove(a+2, b, strlen(b)+1);

您对字符串长度所做的计算并不是真正必要的。

关于从 C 中的字符串中删除子字符串的更简洁方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10871538/

相关文章:

string - 在 Bash 中获取文件的扩展名

java - Java 比较单词与文本文件

python - 在 Python-Fu 中,将字符串包装在 N_() 中有何作用?

C# 子串和 ToUpper

java - 将时间字符串转换为 24 小时格式

c# - SQLite XML 子字符串

C:减少优化运行时间

c - 更新 MongoDB 新 C 驱动程序中的数组

c - 如何检查数组的内容?

c - 为什么我会出现段错误?