从一个字符串中删除其包含的某个(第一个)子串
2012-09-25 11:40
274 查看
函数原型:
int del_substr(char *str,char const *substr);
首先应该判断substr是否在str中,如果并未出现则返回0;
如果出现,函数应该吧str中位于该子串后面的所有字符复制到该子串的位置,从而删除这个子串,然后函数返回1。如果substr多次出现在str中,函数只删除第一次出现的子串,函数的第二个参数绝对不应该被修改。
源码:
int del_substr(char *str,char const *substr)
{
if(str == NULL || substr == NULL)
{
return 0;
}
//标记str中substr开始的位置
char * begin = str;
//标记str中substr结束的位置
char * end = str;
//substr用于比较的游标指针
char const * index = substr;
while(*begin != '\0' && *end != '\0')
{
//在str中寻找substr
while(*begin != *index)
{
begin++;
}
end = begin + 1;
index++;
while(*index == *end && *index != '\0' && *end != '\0')
{
index++;
end++;
}
//如果index和end同时到达各自的字符串尾部,substr子串在str中被找到
//例如str:"abcdeXYZ",substr:"XYZ"
if(*index == '\0' && *end == '\0')
{
*begin = '\0';
printf(str);
return 1;
}
/* 如果index到达substr字符串尾部,而end没有到达str的尾部,substr子串在str中被找到
* 例如str:"abcdeXYZmn",substr:"XYZ"
*/
else if(*index == '\0' && *end != '\0')
{
while(*begin++ = *end++);
printf(str);
return 1;
}
/* 如果index未到达substr字符串尾部,而end有到达str的尾部,substr子串在str中未被找到
* 例如str:"abcdeXYZmn",substr:"XYZmnST"
*/
else if(*index != '\0' && *end == '\0')
{
printf(str);
return 0;
}
/*字符串匹配尚未完成
* 例如str:"XYZabcdeXYZmnSTghd",substr:"XYZmnST"
*/
else
{
begin++;
end = begin;
index = substr;
}
}
printf(str);
return 0;
}
对于str包含多个substr的情况如果需要删除str中所有的substr可以使用上面的函数进行递归调用。
int del_substr(char *str,char const *substr);
首先应该判断substr是否在str中,如果并未出现则返回0;
如果出现,函数应该吧str中位于该子串后面的所有字符复制到该子串的位置,从而删除这个子串,然后函数返回1。如果substr多次出现在str中,函数只删除第一次出现的子串,函数的第二个参数绝对不应该被修改。
源码:
int del_substr(char *str,char const *substr)
{
if(str == NULL || substr == NULL)
{
return 0;
}
//标记str中substr开始的位置
char * begin = str;
//标记str中substr结束的位置
char * end = str;
//substr用于比较的游标指针
char const * index = substr;
while(*begin != '\0' && *end != '\0')
{
//在str中寻找substr
while(*begin != *index)
{
begin++;
}
end = begin + 1;
index++;
while(*index == *end && *index != '\0' && *end != '\0')
{
index++;
end++;
}
//如果index和end同时到达各自的字符串尾部,substr子串在str中被找到
//例如str:"abcdeXYZ",substr:"XYZ"
if(*index == '\0' && *end == '\0')
{
*begin = '\0';
printf(str);
return 1;
}
/* 如果index到达substr字符串尾部,而end没有到达str的尾部,substr子串在str中被找到
* 例如str:"abcdeXYZmn",substr:"XYZ"
*/
else if(*index == '\0' && *end != '\0')
{
while(*begin++ = *end++);
printf(str);
return 1;
}
/* 如果index未到达substr字符串尾部,而end有到达str的尾部,substr子串在str中未被找到
* 例如str:"abcdeXYZmn",substr:"XYZmnST"
*/
else if(*index != '\0' && *end == '\0')
{
printf(str);
return 0;
}
/*字符串匹配尚未完成
* 例如str:"XYZabcdeXYZmnSTghd",substr:"XYZmnST"
*/
else
{
begin++;
end = begin;
index = substr;
}
}
printf(str);
return 0;
}
对于str包含多个substr的情况如果需要删除str中所有的substr可以使用上面的函数进行递归调用。
相关文章推荐
- 从一个字符串中删除一个子串后返回该字符串和包含的子串的个数
- Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
- Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
- 字符串的一些基本操作,复制,长度,子串查找,单词反转,比较,字符串反转,删除指定字符。
- 一个字符串中包含另一个字符串所有字符的最短子串
- 两个字符串,第二个字符串是第一个的子串,打印第二个字符串缺了的字符位置
- 10-2. 删除字符串中的子串(20)
- 华为机试 删除字符串中所有给定的子串
- Python--判断一个字符串是否包含某子串的几种方法
- Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
- 删除字符串中的子串(20)
- PAT 10-2 删除字符串中的子串
- day07之包含min函数的栈+查找一个字符串中第一个只出现两次的字符
- 6.2删除一个字符串包含的另一个字符串
- [转载]字符串-02. 删除字符串中的子串(20)
- Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
- ultraedit 正则表达式 -删除包含某个字符串的所有行
- 从第一个字符串中删除第二个字符串中的所有字符
- 给一个很长的字符串str 还有一个字符集比如{a,b,c} 找出str 里包含{a,b,c}的最短子串。要求O(n)
- Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)