从一个字符串 中删除一个字符串...

drizztguai 2008-02-14 04:03:07
偶快成十万个为什么了...

程序目的: 练习指针的使用, 程序本身没任何意义,所以不用下标, 不用strcmp, strcpy等命令。

函数想删除一个字符串. 如果i am not a hero ! 想删除not .然后输出 i am a hero !

大虾帮看看哪出错了... 怎么删了没效果.

#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;
}
...全文
372 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
drizztguai 2008-02-14
  • 打赏
  • 举报
回复

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;
}



偶自己的终结版... 虽然功能单一不过还是很满足...

感谢guanghong 提醒偶没能利用函数的间接访问更改字符串.
感谢coldwindtang 和nobush 提醒偶空格 :)
感谢baihacker 给偶多功能版和无限的耐心.~.~

谢谢CCTV

情人节完美落幕啦~~~
drizztguai 2008-02-14
  • 打赏
  • 举报
回复
我终于明白了... 原来你是想把要找的单词去掉 ' ' 代表的是空格。。。 太专业了。。。 俺的目的只是把要找的字符串去掉而已。。。谢谢谢谢。 学到了更多。:)

不过如果还会看到这个帖子的话还是想听一下 空字符串到底怎么表示- - ;
drizztguai 2008-02-14
  • 打赏
  • 举报
回复

ABCDE
有一个字符串,从B以后开始,在C以前结果,删除掉以后.....
还是ABCDE
----------------------------
可是' '怎么就能表示空串呢? 他不是一个字符么
baihacker 2008-02-14
  • 打赏
  • 举报
回复
' ' 是一个字符
"" 是字符串,占用内存一字节(mbcs), 用^表示开始,$表示结束的话,在内存中是 ^chr(0)$ 所表示的字符串是在^后面,0前面的字符串如 "abc" : ^abc0$ (chr(0)表示ascii码为0的字符.
nobush 2008-02-14
  • 打赏
  • 举报
回复
" "是空格,不是空串

英文單詞都是由空格分割的,如: not 前後都是空格
drizztguai 2008-02-14
  • 打赏
  • 举报
回复
啊... 这个字符串就是传说中的 空字符串?

那为什么不用 "" 表示,用' ',表示呢? ' ' 不是就代表了一个空格? 那意义也一样么?

i am sorry for my iq= =;
baihacker 2008-02-14
  • 打赏
  • 举报
回复
ABCDE
有一个字符串,从B以后开始,在C以前结果,删除掉以后.....
还是ABCDE
drizztguai 2008-02-14
  • 打赏
  • 举报
回复
为什么要找单词呢...

我看书上说跟什么空串有关.

说:

空字符串是每个字符串的一个子串

在一个字符串中删除一个空字符串不会产生变化...

何解?
唐巧 2008-02-14
  • 打赏
  • 举报
回复
和' '比较是为了找到下一个单词。
drizztguai 2008-02-14
  • 打赏
  • 举报
回复
谢谢。
~

可以帮我解释下 为什么要和' ' 比较么?
baihacker 2008-02-14
  • 打赏
  • 举报
回复

//还有很多东西没有处理
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;
}
guanghong 2008-02-14
  • 打赏
  • 举报
回复
int del_substr ( char *str , char const *substr )
这样不会改变str的值啊,应该
int del_substr ( char **str , char const *substr )
才对!

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧