主题:求C高手 来看看这个是怎么回事?
C之枪手
[专家分:0] 发布于 2011-05-14 21:58:00
#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个回复)
沙发
Pony279 [专家分:10] 发布于 2011-05-14 22:35:00
你的sou是用来干嘛的?怎么没有初始化啊?
板凳
Pony279 [专家分:10] 发布于 2011-05-14 22:36:00
呃。。。我粗心了,看错,不好意思。。。
3 楼
Pony279 [专家分:10] 发布于 2011-05-14 22:56:00
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 楼
cook_ [专家分:0] 发布于 2011-05-14 23:07:00
我晕倒,什么代码啊,还有时候能运行成功,根本不可能
5 楼
C之枪手 [专家分:0] 发布于 2011-05-15 11:44:00
你运行了没有啊........不骗你 ,真的......我也没必要这样做啊......
6 楼
C之枪手 [专家分:0] 发布于 2011-05-15 12:03:00
这个函数的意思是查找str字符串中匹配chars字符串任何字符串的第一个字符,函数然后返回一个指向str中第一个匹配所找到的指针。如果str或者chars指向NULL则函数直接返回NULL。
举个例子:
假如str指向ABCDEF.如果chars指向XYZ,JURY或者QQQQ,函数返回一个NULL指针。如果chars指向XRCQEF,函数就返回一个指向str中C字符的指针。参数所指向的字符串是绝对不允许修改的。
我知道C函数库中有个能实现这个功能的函数叫strpbrk,就是编写了一个和他的功能基本一样的函数而已.....
还有 那个i的意思的执行第一次循环的条件....以后就用不到了....我相信你看了我对这个函数的介绍 你应该能理解这个find_char函数里面代码的意义了。。。。。。。。
7 楼
Pony279 [专家分:10] 发布于 2011-05-15 12:50:00
哦,是这样啊,我运行了,是可以的
还有,我用的是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 楼
酱爆鱼虾蟹 [专家分:40] 发布于 2011-05-17 18:03:00
函数定义的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 *类型
初学者,不正确还请指教啊!!
我来回复