| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1934 人关注过本帖, 1 人收藏
标题:帮我看看,谢谢!(koncker再进!)
只看楼主 加入收藏
当当
Rank: 1
等 级:新手上路
帖 子:235
专家分:0
注 册:2004-4-30
收藏(1)
 问题点数:0 回复次数:11 
帮我看看,谢谢!(koncker再进!)

程序意思是:找出一组字符串中最长的字符串,用函数做. 这是我的程序,但是有点问题,请大家帮忙看看.

#include <stdio.h> #include <string.h> int find(char ch[][20]);//定义函数find; void main() { char ch[5][20]; int i=0,m; for(i=0;i<5;i++) { printf("Input ch[%d]:",i+1); scanf("%s",ch[i]); } m=find(ch); printf("%s",ch[m]); }

int find(char str[][20]) { int i=0,j,k,p; j=strlen(str[i]);//j=第一个字符串的长度, for(i=1;i<5;i++) { k=strlen(str[i]);//k=第二个字符串的长度, if(j<k) //如果第一个字符串的长度小于第二字符串的长度,就将第二个字符串的 p=i;//下标赋值给p } return (p); }

还有这个也看一下吧.

/*求平均值*/ #include <stdio.h> float pjz(int b[]); void main() { int a[10],i=0; float ping; for(i=0;i<10;i++) { printf("Input [%d] number:",i+1); scanf("%d",&a[i]); } ping=pjz(a); printf("ping=%f\n",ping); }

float pjz(int b[]) { int sum=0,i=0; float n; for(i=0;i<10;i++) sum=sum+b[i]; n=float(sum)/10; return (n); }

还有一个,呵呵:

/*判断一个字符串是否出现在一个字符串的结尾.*/ #include <stdio.h> #include <string.h> void main() { char ch[100],str[100]; char *pch,*pstr,*ps; int strcd,chcd; int i=0; printf("Input ch:"); scanf("%s",ch); printf("Input str:"); scanf("%s",str); chcd=strlen(ch); //ch长度 strcd=strlen(str); //str长度

pch=&ch[0]; //指针先定义再说,不知道有没有用 pstr=&str[0];

ps=strchr(ch,str[0]); //ps是str第一个字符在ch中出现的位置

if(ps!=NULL) { for(i=strcd;i>0;i--) { if(str[strcd]==ch[chcd]) //我的意思是从最后一个字符开始比较,但是 { //却又不知道怎么编写才好,郁闷中, //请大家指点迷津 } else { printf("不在结尾!"); } } } else { printf("不包含这个字符串!"); } }

[此贴子已经被作者于2004-06-16 22:21:39编辑过]

搜索更多相关主题的帖子: koncker 
2004-06-14 16:15
zff_ff
Rank: 1
等 级:新手上路
帖 子:147
专家分:0
注 册:2004-5-12
收藏
得分:0 

第一题是p没有初始化造成数组越界

第二题好象没错

第三题没看懂你的程序的意思

[此贴子已经被作者于2004-06-14 19:13:13编辑过]


偶是一只想要飞却忘了咋飞的菜鸟
2004-06-14 19:12
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 

第一个,没看出来,楼上所说的是错误,不存在这个错误。具体的出错表现是什么?没调试你的程序,从程序上看只要输入合法,就没有问题。

第二个, n=float(sum)/10; ---》 n=(float)sum/10;

第三个,不知道你看不看得懂

void main() { char ch[100],str[100]; char*pch,*pstr ; int strcd,chcd ; printf("Input ch:"); scanf("%s",ch); printf("Input str:"); scanf("%s",str); chcd=strlen(ch); /* ch长度 */ strcd=strlen(str); /* str长度 */ if(chcd>strcd)printf("\n错误!\n"); pch=ch ; pstr=str+(strcd-chcd); while(*pch)if(*pch++!=*pstr++) { printf("\n不在!\n"); exit(1); } printf("\n在!\n"); }


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2004-06-14 19:56
zff_ff
Rank: 1
等 级:新手上路
帖 子:147
专家分:0
注 册:2004-5-12
收藏
得分:0 

int i=0,j,k,p=0;

这里一定要初始化

一般情况下,未初始化的变量会被默认为0

但是你这题的情况比较特殊,在内存里他的前16位会被置1(二进制)

也就是说p的值是负值,而且相当小

楼上的要是不信可以跟踪调试

输入时如果第一个字符串最长时,输出结果出现乱码


偶是一只想要飞却忘了咋飞的菜鸟
2004-06-14 21:16
zff_ff
Rank: 1
等 级:新手上路
帖 子:147
专家分:0
注 册:2004-5-12
收藏
得分:0 

第二题

在本程序里float(sum)/10和(float)sum/10是一样的

(我是说在本程序里)


偶是一只想要飞却忘了咋飞的菜鸟
2004-06-14 21:18
当当
Rank: 1
等 级:新手上路
帖 子:235
专家分:0
注 册:2004-4-30
收藏
得分:0 

谢谢楼上二位,前两题已经清楚.

第一题正如zff_ff说的,没有初始化,第二题也如koncker说的,括号打错了.呵呵,谢谢你们俩个.

第三题,koncker你的程序是错的,我编辑过了,比如我输入zhanghaidang和dang,它说错误,不在

[此贴子已经被作者于2004-06-14 22:50:51编辑过]


学好编程就能编出自己的未来! 加油!自信!努力!奋斗!
2004-06-14 22:31
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 

1.

Input ch:dang Input str:zhanghaidang

在!

2.

Input ch:zhanghaidang Input str:dang

错误!

以上两种都是正确的结果。程序就是这样设计的,当ch长度大过str时将得到一个“错误”的提示。

另:if(chcd>strcd)printf("\n错误!\n"); 改为:if(chcd>strcd){printf("\n错误!\n");exit(1);}

第一题,zff_ff说得没错,的确有这个问题。


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2004-06-15 08:53
当当
Rank: 1
等 级:新手上路
帖 子:235
专家分:0
注 册:2004-4-30
收藏
得分:0 
knocher,你的程序我基本上已经明白,

这里有点不明白,while的循环条件就只是*pch,为什么呢?能够跟我讲讲吗? while(*pch) if(*pch++!=*pstr++) //还有if这句条件,似懂非懂,知道什么意思,但是不知道工作原理,能够说说吗? { printf("\n不在!\n"); exit(1);

} printf("\n在!\n"); }


学好编程就能编出自己的未来! 加油!自信!努力!奋斗!
2004-06-16 20:48
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 

while(*pch) if(*pch++!=*pstr++) //还有if这句条件,似懂非懂,知道什么意思,但是不知道工作原理,能够说说吗? { printf("\n不在!\n"); exit(1);

}

===========================

while(*pch!='\0') { if(*pch!=*pstr) { printf("\n不在!\n"); exit(1);

} pch++; pstr++; }

这两种写法是等价的。

但是,上面一种是一种优化写法。具体与编译器有关,解释很复杂,举个简单的例子:

*ptr++=6; 与 *ptr=6;ptr++; 是一样的意思,但是,汇编后的代码是不一样的,用前一个只读ptr一次,用后一个,要读ptr二次,一次赋值,一次+1。(但现在有很多编译器会自动优化成前一种代码)

当然,我们写程序时最好是写成前一种优化的代码,这样就和编译器无关了,编译后一定是优化的代码。

当一个程序不是很大时,几乎没有区别,当程序很大时,区别就很明显。


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2004-06-16 21:50
当当
Rank: 1
等 级:新手上路
帖 子:235
专家分:0
注 册:2004-4-30
收藏
得分:0 

明白了,谢谢!

但是我把后面改成这个样子程序出错了. while(*pch='\0') { if(*pch!=*pstr) { printf("\n不在!\n"); exit(1); } pch++; pstr++; } printf("\n在!\n"); } 例如我输入dagn,再输入dangdang,他显示"在!"

[此贴子已经被作者于2004-06-16 22:20:34编辑过]


学好编程就能编出自己的未来! 加油!自信!努力!奋斗!
2004-06-16 21:55
快速回复:帮我看看,谢谢!(koncker再进!)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027583 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved