回 帖 发 新 帖 刷新版面

主题:求C高手 来看看这个是怎么回事?

#include <stdio.h>

char *
find_char( char const *str, char const *chars )
{
    char *cp;
    int i;

    if( str != NULL && chars != NULL ){
        for( i == 1; *str != '\0'; str++ ){
            for( cp = chars; *chars != '\0'; chars++ ){
                if( *str == *chars ){
                    return str;
                }
            }
        }
    }
    else{
        return NULL;
    }
}


void
main()
{
    char *str,*ch,*sou;

    str = (char*) malloc( 100*sizeof( char ) );
    ch = (char *) malloc( 100*sizeof( char ) );

    gets( str );
    gets( ch );

    sou = find_char( str,ch );
    if( *sou != NULL ){
        printf("该字符为:%c\n",*sou);
    }
    else{
        printf("靠,很不幸,没有发现目标.....\n");
    }
    
    free( str );
    free( ch );
}






这个程序有时候运行正确  有时候错误........不能发图片  要不然 就发个图片给你们看看...

回复列表 (共8个回复)

沙发

你的sou是用来干嘛的?怎么没有初始化啊?

板凳


呃。。。我粗心了,看错,不好意思。。。

3 楼

for( i == 1; *str != '\0'; str++ ){
            for( cp = chars; *chars != '\0'; chars++ ){
                if( *str == *chars ){
                    return str;
                }
            }
        }
在这里,经过一次循环,也就是执行完
 for( cp = chars; *chars != '\0'; chars++ ){
                if( *str == *chars ){
                    return str;
                }
            }
之后,*chars == '\0' 了。。。
其实。。。其实我没看懂这个程序想做什么。。。
还有,子程序里的变量i是用来干什么的? for( i == 1; *str != '\0'; str++ ) 
我没看明白为什么会有 i == 1? 而且,后面就再也没有出现i了 

你试试改成这样看行不?
find_char( char const *str, char const *chars )
{
    char *cp;
    int i;

    if( str != NULL && chars != NULL ){
        for( i == 1; *str != '\0'; str++ ){
            for( cp = chars; *cp != '\0'; cp++ ){     //这里改了
                if( *str == *cp ){       //这里改了
                    return str;
                }
            }
        }
    }
    else{
        return NULL;
    }
}

4 楼


我晕倒,什么代码啊,还有时候能运行成功,根本不可能

5 楼

你运行了没有啊........不骗你 ,真的......我也没必要这样做啊......

6 楼


这个函数的意思是查找str字符串中匹配chars字符串任何字符串的第一个字符,函数然后返回一个指向str中第一个匹配所找到的指针。如果str或者chars指向NULL则函数直接返回NULL。
举个例子:
假如str指向ABCDEF.如果chars指向XYZ,JURY或者QQQQ,函数返回一个NULL指针。如果chars指向XRCQEF,函数就返回一个指向str中C字符的指针。参数所指向的字符串是绝对不允许修改的。
我知道C函数库中有个能实现这个功能的函数叫strpbrk,就是编写了一个和他的功能基本一样的函数而已.....
还有 那个i的意思的执行第一次循环的条件....以后就用不到了....我相信你看了我对这个函数的介绍  你应该能理解这个find_char函数里面代码的意义了。。。。。。。。

7 楼

哦,是这样啊,我运行了,是可以的
还有,我用的是Visual Studio 2010,在i == 1那一行编译器给我的warning是:
“==”: 运算符不起任何作用;是否是有意使用“=”的?

#include <stdio.h>

char *find_char( char *str, char *chars )  //const去掉了
{
    char *cp;
    int i;

    if( str != NULL && chars != NULL ){
        for( i == 1; *str != '\0'; str++ ){
            for( cp = chars; *cp != '\0'; cp++ ){     //这里改了
                if( *str == *cp ){       //这里改了
                    return str;
                }
            }
        }
    }
     //else去掉了
         return NULL;
}





void
main()
{
    char *str,*ch,*sou;

    str = new char[ 100];   //c++里动态内存分配的用法,效果应该是一样的
    ch = new char[ 100];

    gets( str );
    gets( ch );

    sou = find_char( str,ch );
    if( sou != NULL ){     //这里也改了   
        printf("该字符为:%c\n",*sou);
    }
    else{
        printf("靠,很不幸,没有发现目标.....\n");
    }
    
    delete str;
    delete ch ;  //这个也是C++里的用法
}

8 楼

函数定义的find_char( char const *str, char const *chars )//定义一个char型数的常量指针
下面双循环for( cp = chars; *chars != '\0'; chars++ )//chars++ 不是非法了吗?

函数改为find_char( const char *str, const char *chars )
下面双循环for( cp = chars; *chars != '\0'; chars++ )
返回sou = find_char( str,ch );//这里也要定义sou 为const char *类型

初学者,不正确还请指教啊!!

我来回复

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