字符串删除子串
C和指针第六章课后题:lol#include <stdio.h>
int del_substr(char *str, char const *substr);
int main(void)
{
char src[] = "ABCDEFG";
//char *substr = "FGH";
char *substr = "CDE";
int ret = 0;
ret = del_substr(src, substr);
printf("ret = %d\n", ret);
printf("%s\n", src);
return 0;
}
int del_substr(char *str, char const *substr)
{
char *t_str = str;
char const *t_substr = substr;
int flag = 0;
char *find_str = NULL;
//查找子串
while (*t_str)
{
if (*t_str == *t_substr)
{
if (find_str == NULL)
{
find_str = t_str;//指向第一次出现子串的位置
}
t_substr++;
if (*t_substr == '\0') //找到目标子串
{
break;
}
}
else
{
t_substr = substr; //复位指针
find_str = NULL;
}
t_str++;
}
if (find_str == NULL)
{
flag = 0;
}
else
{
flag = 1;
//进行删除除子串
while (*t_str)
{
t_str++;
*find_str = *t_str; //将后面的字符赋值过来
find_str++;
}
}
return flag;
}
配个图:
厉害,学习学习 本帖最后由 老伙计 于 2018-9-1 22:48 编辑
楼主的程序太罗嗦,看看这个代码:
#include <stdio.h>
#include <string.h>
int del_substr(char * str , char const * substr)
{
int m = strlen(str) ;
int n = strlen(substr) ;
int flag = 0 ;
if (n > 0 && m >= n) {
int c = 0 ;
int d = 0 ;
while(c < m) {
if (! strncmp(& str , substr , n)) {
c = c + n ;
flag ++ ;
} else {
str = str ;
}
}
str = 0 ;
}
return flag ;
}
int main(void)
{
char src[] = "ABCDEFG" ;
//char *substr = "FGH" ;
char substr[] = "CDE" ;
int ret = 0 ;
ret = del_substr(src , substr);
printf("ret = %d\n" , ret) ;
printf("%s\n" , src) ;
return 0 ;
} 老伙计 发表于 2018-9-1 21:34
楼主的程序太罗嗦,看看这个代码:
#include
厉害! 但是书中不让用字符串函数所以就没往那边想 本帖最后由 老伙计 于 2018-9-2 12:12 编辑
caoxiaolin 发表于 2018-9-2 07:39
厉害! 但是书中不让用字符串函数所以就没往那边想
那咱就来一个不用字符串函数的:
#include <stdio.h>
int del_substr(char * str, char const * substr)
{
int m = 0 ;
int n = 0 ;
int flag = 0 ;
while (str) m ++ ;
while (substr) n ++ ;
if (n > 0 && m >= n) {
int c = 0 ;
int d = 0 ;
while(c < m) {
int e = 0 ;
if (m - c >= n) {
for (int i = 0 ; i < n ; i ++) {
if (str == substr) e ++ ;
else break ;
}
}
if (e == n) {
c = c + n ;
flag ++ ;
} else {
if (flag) str = str ;
c ++ ;
d ++ ;
}
}
str = 0 ;
}
return flag ;
}
int main(void)
{
char src[] = "ABCDEFG" ;
//char *substr = "FGH" ;
char substr[] = "CDE" ;
int ret = 0 ;
ret = del_substr(src, substr);
printf("ret = %d\n" , ret) ;
printf("%s\n", src) ;
return 0 ;
}
页:
[1]