主题:C字符串指针 一解题出错
senluo
[专家分:10] 发布于 2010-06-27 16:02:00
题目: 编写一个函数,它在一个字符串中进行搜索。查找所有在一个给定字符集合中出现的
字符。这个函数原型如下:
char *find_char(char const *source,char const *chars);
举个例子,假定source指向ABCDEF。如果chars指向XYZ、JURY或者QQQQ,函数就返
回一个NULL指针。如果chars指向XRCQEF,函数就返回一个指向source中C字符的指针。参
数所指向的字符串绝对不会被修改的。
自己写的这道程序:
char *pnull = 0;
char *find_char(char const *source,char const *chars){
char tmp = source;
while((*source==0)||(*chars==0))
return *pnull;
for(;*chars!='\0';chars++){
for(source=tmp;*source!='\0';source++)
if(*chars==*source){
return *source;
}
}
return *pnull;
}
编译通过,运行不对。估计是不少错。苦思良久,愣是没发现出问题。希望各位能指教一二。小生谢过~~
回复列表 (共7个回复)
沙发
alweeq86 [专家分:1170] 发布于 2010-06-27 18:50:00
char tmp = source;
source是char指针怎么可以用tmp是char类型
所以要定义
char *tmp = source;
板凳
alweeq86 [专家分:1170] 发布于 2010-06-27 18:53:00
while((*source==0)||(*chars==0))
return *pnull;
*source==0 和*chars==0是什么意思? *source=='\0'??
return *pnull; pnull是什么?没看到定义怎么用使用了 返回值类型也不对
你要返回指针return pnull;
3 楼
senluo [专家分:10] 发布于 2010-06-27 18:59:00
[quote]char tmp = source;
source是char指针怎么可以用tmp是char类型
所以要定义
char *tmp = source;[/quote]
tmp是用来暂存source指针初地址,用于后面的第二层for循环。值取source的地址。应该char型变量即可吧???
请继续指教
4 楼
senluo [专家分:10] 发布于 2010-06-27 19:02:00
[quote]while((*source==0)||(*chars==0))
return *pnull;
*source==0 和*chars==0是什么意思? *source=='\0'??
return *pnull; pnull是什么?没看到定义怎么用使用了 返回值类型也不对
你要返回指针return pnull;
[/quote]
其实题目中还有个要求没列出来的,就是说如果参数为空指针,则返回NULL。
返回似乎错了。应该是指针变量pnull。
5 楼
alweeq86 [专家分:1170] 发布于 2010-06-27 20:25:00
[quote][quote]char tmp = source;
source是char指针怎么可以用tmp是char类型
所以要定义
char *tmp = source;[/quote]
tmp是用来暂存source指针初地址,用于后面的第二层for循环。值取source的地址。应该char型变量即可吧???
请继续指教[/quote]
你要类型相同才可以赋值啊
6 楼
alweeq86 [专家分:1170] 发布于 2010-06-27 20:27:00
[quote][quote]while((*source==0)||(*chars==0))
return *pnull;
*source==0 和*chars==0是什么意思? *source=='\0'??
return *pnull; pnull是什么?没看到定义怎么用使用了 返回值类型也不对
你要返回指针return pnull;
[/quote]
其实题目中还有个要求没列出来的,就是说如果参数为空指针,则返回NULL。
返回似乎错了。应该是指针变量pnull。[/quote]
判断参数是不是空指针((*source==0)||(*chars==0))这个也不对吧
应该是(source==null||chars==null) 你的意思应该是((source==0)||(chars==0)) 不过我不知道这个对不对
7 楼
雪光风剑 [专家分:27190] 发布于 2010-06-27 23:18:00
注意NULL跟0有区别,判断指针是否指空的时候应该判断是否==NULL,一般不要自己人造一个变量,以免节外生枝。
注意,char*长度上等同于unsigned long,比char本身的长度要长出许多,弱类型是不能隐式保存强类型的,所以不能用char tmp来强制保存char*
我来回复