C语言问题为什么输入I与i结果不一样

#include<stdio.h>#include<string.h>main(){inti,j;charstr[10],*s[10]={"SQL","hello","b... #include <stdio.h>
#include <string.h>
main()
{ int i, j;
char str[10], *s[10]={"SQL","hello","bear","zone"};
gets(str);
for(i = 0; i < 4; i++){
if(strcmp(str, s[i]) > 0) continue;
j = 3;
while(j >= i){
s[j+1] = s[j];
j--;
}
s[i] = str;
break;
}
if(i == 4) s[4] = str;
for(i = 0; i < 5; i++)
printf("%s ", s[i]);
putchar('\n');}
展开
 我来答
肚子P
2014-06-08
知道答主
回答量:1
采纳率:0%
帮助的人:1349
展开全部
这段程序相当于一个插入过程

将str串插入到s字符串数组的合适位置,要求是这个串比左面的大,比右面的小。(以ascii序来看)
输入I,ascii码49H,最小,比S小,故而会出现在第一个位置。
输入i,比S、h、b大,比z小,所以会出现在bear与zone之间。
追问
strcmp(str, s[i])是比较两个字符串的个数还是ASCII值
追答
比较对应位置的字符ASCII码,若字符ascii码能比较出大小,则以其大小决定字符串大小,若不能,则说明是同一字符,继续比较下一位置,直到分出大小……
举几个例子吧。
bz与za比,那么za > bz,因为z > b。
abc 与 abcd 比, 那么 abcd > abc ,因为这时相当于d 与 ‘\0’比较,自然是d大。
int strcmp(const char *str1,const char *str2){
while(*str1==*str2){
if(*str1=='\0')
return 0;
str1++;
str2++;
}
return*str1-*str2;
}
笃侠6A
2014-06-08 · TA获得超过3734个赞
知道大有可为答主
回答量:3205
采纳率:75%
帮助的人:3219万
展开全部
I与i具有不同的ASCII,当然不一样了
追问
strcmp(str, s[i])是比较两个字符串的个数还是ASCII值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zjfaok
2014-06-08 · TA获得超过6805个赞
知道大有可为答主
回答量:4146
采纳率:62%
帮助的人:1560万
展开全部
I 和 i 本来就是两个字母
追问
strcmp(str, s[i])是比较两个字符串的个数还是ASCII值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
四123区块链导航
2014-06-08
知道答主
回答量:2
采纳率:0%
帮助的人:1753
展开全部
i对应的ASCII码为105;I对应的ASCII码为73

我也是菜鸟,在这请教下:这句s[i] = str;看不懂 为什么不是s[i+1]=str或s[j+1]=str???谢谢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
吾屺情彩包29
2014-06-08 · TA获得超过272个赞
知道小有建树答主
回答量:182
采纳率:0%
帮助的人:138万
展开全部
i<z
I>z
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式