69,371
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TRUE 1
#define FALSE 0
int del_substr ( char *str , char const *substr );
int
main ( void )
{
char str[] = "i am not a hero!";
char *substr = "not";
if ( del_substr ( str , substr ) )
printf ("%s" , str );
else printf ("NOt founded!!!");
return EXIT_SUCCESS;
}
int del_substr ( char *str , char const *substr )
{
char *p1; /* 流遍原始字符串 */
char *p2; /* 流遍被删字符串 */
char *p3; /* 中间变量,负责校对全部字符串相等*/
p1 = str;
for ( ; '\0' != *p1 ; p1++ ){
for ( p2 = const_cast<char *>(substr) , p3 = p1; /* 用p3承接p1的值 */
'\0' != *p2 ; p2++ , p3++ ){
if ( *p2 != *p3 )
break;
}
/*
** 给原始字符串重新赋值,以'\0' 结束
*/
while ( '\0' !=( *p1++ = *p3++ ))
;
return TRUE;
}
return FALSE;
}
int del_substr ( char *str , char const *substr )
{
const char *p2; /* 流遍被删字符串 */
char *p3; /* 中间变量,负责校对全部字符串相等*/
for ( ; '\0' != *str ; str++ ){
for ( p2 = substr , p3 = str ; /* 用p3承接str的值 */
'\0' != *p2 ; p2++ , p3++ ){
if ( *p2 != *p3 )
goto oo; /*break 的话只能跳出单层循环。*/
}
/*
** 给原始字符串重新赋值,以'\0' 结束
*/
while ( '\0' !=( *str++ = *p3++ ))
;
return TRUE;
oo: ;
}
return FALSE;
}
//还有很多东西没有处理
int del_substr ( char *str , char const *substr )
{
char* dest = str;
char* token;
const char* temp;
int found = FALSE;
while (*str)
{
while (*str && *str == ' ')
{
*dest++ = *str++;
}
temp = substr;
token = str;
while (*temp && *token && *token != ' ' && *temp++ == *token++);
if (!*temp && (!*token || *token == ' '))
{
str = token;
found = TRUE;
}
else
{
while (*str && *str != ' ')
*dest++ = *str++;
}
}
*dest = 0;
return found;
}