删除部分字符串的函数

时间:2019-01-02 21:48:08

标签: c string substring

我需要创建一个函数,该函数将删除部分字符串。我只能使用stdio.h和stdlib.h。

例如:我有以下字符串:“ Dad and mom /* and sister */ are at home”。我需要删除以/*开头和以*/结尾的部分。因此结果将是“ Dad and mom are at home”。

3 个答案:

答案 0 :(得分:0)

您可以使用strstrhttps://www.tutorialspoint.com/c_standard_library/c_function_strstr.htm)查找起始定界符,然后再次使用终止定界符。

然后,您可以使用memmovehttp://www.cplusplus.com/reference/cstring/memmove/)移动字符串的其余部分。

如果要删除多个部分,则可以循环进行。

尝试首先在纸上做它,还要尝试调试程序以查看它是否达到了您的期望。

答案 1 :(得分:0)

C确实没有“字符串”作为您可以使用的类型。相反,C“字符串”是一个概念-内存中的字符序列,以NUL字符终止。因此,要对字符串进行任何操作,都需要了解内存管理。

通常,刚开始的程序员(和示例)使用固定大小的数组以及静态(恒定)字符串和固定大小的数组(假定适合)中的字符串(应该经常检查)混合来做事情。

因此,在您的情况下,您只是说“有一个字符串”,而不是说“如何”拥有它。如果您将其放在足以容纳它的内存缓冲区中,则可以就地修改缓冲区以包含(较短的)所需字符串。或者,您可以将其复制到另一个足以容纳修改后的字符串的缓冲区。那将是两个非常不同的C函数,这两个函数都可以描述为“删除字符串的一部分”

答案 2 :(得分:0)

str必须是可修改的

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


char *RemoveComment(char *str)
{
    char *start;
    char *end;


    do
    {
        start = strstr(str, "/*");
        end = strstr(str, "*/");
        if(start && end && end > start)
        {
            memmove(start, end + 2, strlen(end + 2) + 1);
        }
    }while (start && end);
    return str;
}


int main()
{

    char text[] = "D/*ad a*/nd mom /* and sister */ ar/*e at*/ ho/*me*/";
    printf("%s\n", RemoveComment(text));

    return 0;
}