回 帖 发 新 帖 刷新版面

主题:C字符串指针 一解题出错

题目:    编写一个函数,它在一个字符串中进行搜索。查找所有在一个给定字符集合中出现的
       字符。这个函数原型如下:
      
       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个回复)

沙发

char tmp = source;
source是char指针怎么可以用tmp是char类型 
所以要定义
char *tmp = source;

板凳

while((*source==0)||(*chars==0))
        return *pnull;
*source==0 和*chars==0是什么意思?  *source=='\0'??
 
return *pnull; pnull是什么?没看到定义怎么用使用了 返回值类型也不对 
你要返回指针return pnull;

3 楼

[quote]char tmp = source;
source是char指针怎么可以用tmp是char类型 
所以要定义
char *tmp = source;[/quote]

tmp是用来暂存source指针初地址,用于后面的第二层for循环。值取source的地址。应该char型变量即可吧???
请继续指教

4 楼

[quote]while((*source==0)||(*chars==0))
        return *pnull;
*source==0 和*chars==0是什么意思?  *source=='\0'??
 
return *pnull; pnull是什么?没看到定义怎么用使用了 返回值类型也不对 
你要返回指针return pnull;

[/quote]
其实题目中还有个要求没列出来的,就是说如果参数为空指针,则返回NULL。
返回似乎错了。应该是指针变量pnull。

5 楼

[quote][quote]char tmp = source;
source是char指针怎么可以用tmp是char类型 
所以要定义
char *tmp = source;[/quote]

tmp是用来暂存source指针初地址,用于后面的第二层for循环。值取source的地址。应该char型变量即可吧???
请继续指教[/quote]

你要类型相同才可以赋值啊

6 楼

[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 楼

注意NULL跟0有区别,判断指针是否指空的时候应该判断是否==NULL,一般不要自己人造一个变量,以免节外生枝。
注意,char*长度上等同于unsigned long,比char本身的长度要长出许多,弱类型是不能隐式保存强类型的,所以不能用char tmp来强制保存char*

我来回复

您尚未登录,请登录后再回复。点此登录或注册