| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 953 人关注过本帖
标题:对比两个程序,能找出另一个的问题吗?
只看楼主 加入收藏
锦芳
Rank: 2
等 级:论坛游民
帖 子:44
专家分:15
注 册:2013-3-1
结帖率:46.15%
收藏
已结贴  问题点数:20 回复次数:11 
对比两个程序,能找出另一个的问题吗?
问题:编写程序实现函数strcmp()的功能,将两个字符串s和t进行比较,然后将两个字符串中第一个不相同字符的ASCII码值之差输出
#include<stdio.h>
main()
{
 char s[30],t[30];
 int i=0,j=0,a;
 printf("请输入两个字符串:\n");
 gets(s);
 gets(t);
 if(s[i]!=t[j])
 {
 a=s[i]-t[j];
 printf("ASCII码值之差为%d",a);
 }
 else if(s[i]=='\0'&&t[j]=='\0')
 printf("ASCII码值之差a=0");
 else
  i++;
  j++;
}

第二个#include<stdio.h>
void main()
{
    char s=[10],t=[10];
    int i=0,j=0,a;
    gets(s);
    gets(t);
   
        if(s[i]!=t[j])
        {    if(s[i]<t[j])
            a=t[j]-s[i];
            if(s[i]>t[j])
            a=s[i]-t[j];
        
        }
        else if(s[i]=='\0'&&t[j]=='\0')
            a=0;
        printf("%d",a);
        
}为什么第二个是错的?
搜索更多相关主题的帖子: 编写程序 include 字符串 
2013-05-12 14:47
yyqd2013
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:35
专家分:154
注 册:2013-5-8
收藏
得分:7 
第二个程序,相差永远大于0,有些功能就没了。

原型:extern int strcmp(const char *s1,const char * s2);
所在头文件:string.h
功能:比较字符串s1和s2。
一般形式:strcmp(字符串1,字符串2)
说明:
当s1<s2时,返回值<0
当s1==s2时,返回值=0
当s1>s2时,返回值>0
2013-05-12 15:42
锦芳
Rank: 2
等 级:论坛游民
帖 子:44
专家分:15
注 册:2013-3-1
收藏
得分:0 
回复 2楼 yyqd2013
可是第一个程序没有用strsmp函数也可以算出来,我只是想在他的基础上再判断,让他不要输出负数。
2013-05-12 15:55
yyqd2013
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:35
专家分:154
注 册:2013-5-8
收藏
得分:0 
为什么不要负数?字符串比较就像数字比较:
1 - 1 = 0, 2 - 1 = 1, 1 -  2 = -1。
第二个程序无法区分后两种情况,不是弄巧成拙吗

[ 本帖最后由 yyqd2013 于 2013-5-12 16:04 编辑 ]
2013-05-12 15:59
Ryker
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:145
专家分:420
注 册:2013-2-19
收藏
得分:7 
//strcmp的返回值就是ACSII的差吧

...试验了一下...我的系统只返回 -1 0 1 ...

定义一个变量接受返回值,再取绝对值就是正的了..

[ 本帖最后由 Ryker 于 2013-5-12 16:16 编辑 ]
2013-05-12 16:14
yyqd2013
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:35
专家分:154
注 册:2013-5-8
收藏
得分:0 
一个函数,都可以百度百科!例举的源代码,效率和健壮性会比这个强。
2013-05-12 16:21
Ryker
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:145
专家分:420
注 册:2013-2-19
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <string.h>

#define SIZE 30

int main(void)
{
int i, a;
char s[SIZE];
char t[SIZE];
int len;

gets(s);
gets(t);

len = strlen(s) >= strlen(t) ? strlen(t) + 1 : strlen(s) + 1; /*循环次数为最短字符串长度 + 1*/

for(i = 0; i < len; i++)
{
    if((a = s[i] - t[i]))
        break;
}

if(a < 0)
    a = -a;

printf("%d\n", a);
return 0;
}


[ 本帖最后由 Ryker 于 2013-5-12 16:44 编辑 ]
2013-05-12 16:22
yyqd2013
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:35
专家分:154
注 册:2013-5-8
收藏
得分:0 
please test:
bcd
bcd
2013-05-12 16:31
Ryker
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:145
专家分:420
注 册:2013-2-19
收藏
得分:0 
回复 8楼 yyqd2013
修改了
2013-05-12 16:33
锦芳
Rank: 2
等 级:论坛游民
帖 子:44
专家分:15
注 册:2013-3-1
收藏
得分:0 
回复 7楼 Ryker
哇,这个方法好啊!谢谢,我最近学了函数的调用,没想到这样也可以啊,
2013-05-12 16:36
快速回复:对比两个程序,能找出另一个的问题吗?
数据加载中...
 
   



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

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