c语言字符串删除指定字符子串
介绍
C语言中,字符串的处理是非常重要的一部分,可以说字符串是C语言中最重要的数据类型之一。字符串往往需要进行删除、替换等操作,本文将介绍如何在C语言中删除指定的字符子串。
实现
C语言中实现删除指定的字符子串,可以使用标准库中的函数strchr()和strcpy()等函数。strchr()函数可以用于查找字符串中的指定字符,如果找到了,则返回该字符所在的位置;否则返回NULL。strcpy()函数可以用于将一个字符串复制到另一个字符串中。利用这两个函数,就可以比较简单地实现删除指定的字符子串了。
首先,需要定义一个函数,用于删除指定的字符子串。函数需要接收两个参数,第一个参数是待删除的字符串,第二个参数是指定的字符子串。函数的实现如下:
void deleteSubStr(char *str,char *substr)
{
int len1=strlen(str),len2=strlen(substr);
while(strstr(str,substr))
{
int pos=strstr(str,substr)-str;
for(int i=pos;i<len1-len2;++i)
{
str[i]=str[i+len2];
}
len1-=len2;
str[len1]='\0';
}
}
在函数中,首先获取待删除字符串的长度len1和指定的字符子串的长度len2。然后使用while循环,查找待删除字符串中的子串。如果找到了,则获取该子串的位置pos。接下来使用一个for循环,将pos+len2之后的所有字符移动到pos之前的位置,覆盖掉指定的字符子串。循环结束后,更新待删除字符串的长度,并在末尾加上字符串终止符“”。
示例
为了方便理解,我们提供一个示例代码,可以直接运行来感受一下删除指定字符子串的效果。示例代码如下:
#include <stdio.h>
#include <string.h>
void deleteSubStr(char *str,char *substr);
int main(void)
{
char str[100],substr[100];
printf("Please input the string:\n");
scanf("%s",str);
printf("Please input the sub string to be deleted:\n");
scanf("%s",substr);
printf("Before:\n%s\n",str);
deleteSubStr(str,substr);
printf("After:\n%s\n",str);
return 0;
}
void deleteSubStr(char *str,char *substr)
{
int len1=strlen(str),len2=strlen(substr);
while(strstr(str,substr))
{
int pos=strstr(str,substr)-str;
for(int i=pos;i<len1-len2;++i)
{
str[i]=str[i+len2];
}
len1-=len2;
str[len1]='\0';
}
}
可以将上述代码复制到代码编辑器中,然后编译并运行。输入待删除的字符串和指定的字符子串,即可看到删除效果。
总结
本文主要介绍了如何在C语言中删除指定的字符子串。使用函数strchr()和strcpy()等函数可以很方便地实现删除操作。此外,本文还提供了示例代码,可以让读者更好地理解删除操作的实现和使用方法。
自己简单训练了下
#include <stdio.h>
#include <string.h>
int main(void)
{
char str[100]="abcdefg";
char substr[100]="c";
int len1=strlen(str),len2=strlen(substr);
printf("len1:%d,len2:%d\n",len1,len2);
printf("新字符串的长度等于len1-len2:%d\n",len1-len2);
int pos=strstr(str,substr)-str;
printf("pos:%d\n\n",pos);
for(int i=pos;i<len1-len2;i++){
printf("%d\n",i);
str[i]=str[i+len2];//将pos+len2之后的所有字符移动到pos之前的位置,覆盖掉指定的字符子串
}
len1-=len2;//更新新字符串长度
str[len1]='\0';//末尾添加\0
puts(str);
}