|
作者: ljsh012 [ljsh012] 论坛用户 | 登录 |
题目: 把字符串str1中和str2相同的字符去掉后再输出来.比如:str1="abc",str2="aef",程序运行后输出字符串"bc". 以下是我的程序,可是编译没出错,执行确错了.请指教. #include <stdio.h> main() { int k,i,j; char* str1; char *temp; char* str2; char str[20]; str1="vabc"; str2="gaod"; for(i=0;i<4;i++) //外循环,把字符串str1中的每个字符和str2中的都进行比较 { temp=str1; for(j=0;j<4;j++) { if((*(temp)!=*(str2++))&&j<3) //如果比较到第三个字符还不等的话,继续把J自加比较. continue; else if(*(temp)==*(str2++)) //如果相等就退出内循环,把str1自加后再进行内循环比较. break; if(j==3&&(*(temp)!=*(str2++))) //如果已经比较到str2的最后一位并且不相等,那么符合输出条件,把它赋给 //一个字符数组. str[k++]=*temp; } str1++; } for(k=0;k++;) { printf("%c",str[k]); //输出结果 } getchar(); } 可是程序编译通过而执行不出来. 如果有另外好的算法的话,希望贴出来共享.谢谢.(上面的程序固化了字符串,不友好) |
地主 发表时间: 05-11-28 12:41 |
回复: 286 [unique] 版主 | 登录 |
#include <string.h> 把strlen,find,strcat都用上。 |
B1层 发表时间: 05-11-28 16:52 |
回复: lida1818 [lida1818] 论坛用户 | 登录 |
#include <stdio.h> #include <string.h> void foo( char *str1,char *str2); int main() { char *str1=""; char *str2=""; foo(str1,str2); } void foo( char *str1,char *str2) { int flog; char *tem1=str1,*tem2=str2; if(!tem1)return; while(*tem1) { flog = 0; tem2=str2; while(*tem2) { if(*tem1==*tem2) { flog=1; break; } tem2++; } if(!flog)putchar(*tem1); tem1++; } } |
B2层 发表时间: 05-11-29 10:39 |
回复: ljsh012 [ljsh012] 论坛用户 | 登录 |
是这样的,它题目要求不能用任何API,我以为<string.h>已经属于API了。因为c中没有String类型。 所以就没用String.h了。(理解上的错误?)如果用它,程序就好写了。 上面的程序觉得蛮不错,正在细细品味。这久一直在用java,c的一些基本东西都给忘了。看来得好好复习一下了。 [此贴被 霜泉(ljsh012) 在 11月29日10时55分 编辑过] |
B3层 发表时间: 05-11-29 10:41 |
回复: xiaoshi [xiaoshi] 论坛用户 | 登录 |
烟雨平生的程序看了,感觉不错,但有个地方不明白 在foo函数中,前面定义了个,*tem2=str2,但是后面 循环的时候怎么有个来个tem2=str2;这个不清楚? if(!tem1)我的理解是,如果(非指针), 我感觉这个值不会出现0的结果吧, 属我愚昧,多指教. |
B4层 发表时间: 05-12-02 19:25 |
回复: ljsh012 [ljsh012] 论坛用户 | 登录 |
问得好! 是这样的: 第二个tem2=str2是因为你把str1的第一个字符和str2的所有字符比较完后temp2已经指到str2的最后一位字符了。而外循环第二次得把str1的第二个字符再和str2的所有字符比较,所以当然得把str2的首地址重先赋值给temp2了。 至于第二个问题我是这么理解的,如果没有传入参数,那么指针也就不会被初始化,取反后程序就退出。 |
B5层 发表时间: 05-12-02 23:20 |
回复: xiaoshi [xiaoshi] 论坛用户 | 登录 |
还是没怎么搞明白,回去动手看看,也许回理解点 不过你说的指针没有初始化,我好象没听过指针没有初始化的情况下可以做逻辑操作啊 也许我少见多怪吧,哈哈,好长时间都没动过手了,好多东西还停在学校的记忆上了. |
B6层 发表时间: 05-12-03 17:46 |
回复: lida1818 [lida1818] 论坛用户 | 登录 |
#include <stdio.h> #include <string.h> void foo( char *str1,char *str2); int main() { char *str1=null; char *str2="1234"; foo(str1,str2); } void foo( char *str1,char *str2) { int flog; char *tem1=str1,*tem2=str2; if(!tem1)return; while(*tem1) { flog = 0; tem2=str2; while(*tem2) { if(*tem1==*tem2) { flog=1; break; } tem2++; } if(!flog)putchar(*tem1); tem1++; } } 假如这种情况下,就有用了,这只是一个容错。if(!tem1||!tem2)return; 确保指针为非空指针,那天只是随意在IE上敲了几句。 |
B7层 发表时间: 05-12-04 11:27 |
回复: ljsh012 [ljsh012] 论坛用户 | 登录 |
c中没有null 楼上的? 其实我觉得不用容错也行。因为没有null。所以程序不可能出错的。如果是出现野指针的情况,那个语句也是没用的。因为野指针也总是正值。除非00000 ~_~ 请指教。谢谢。 |
B8层 发表时间: 05-12-04 14:07 |
回复: lida1818 [lida1818] 论坛用户 | 登录 |
是NULL 自己定义一个null也行,就是 0 #include <stdio.h> char *ptr1; int main() { char *ptr0=NULL; printf("%p %p",ptr0,ptr1); } |
B9层 发表时间: 05-12-04 22:52 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号