鱼C论坛

 找回密码
 立即注册
查看: 1442|回复: 17

[已解决]strcmp函数疑问

[复制链接]
发表于 2020-8-30 16:48:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
#include <string.h>

int main()
{
    char *str1 = "c";
    char *str2 = "FishC.com";
    int t = strcmp(str1, str2);
    printf("%d\n", t);
    
    getchar();
    return 0;
}
QQ截图20200830164733.png
字符串1(str1)明显小于字符串2(str2)
不过strcmp函数返回值为1,给出了str1 > str2的结果。
是不是该函数只能用于判断如下字符串的大小:
“asdf” 与 “asdfg”
即两个字符串一定要有相同部分。
按照下面这个例子:
“asdfhgfd” 与 “asdfz”
strcmp函数判断到f后的字符“h”与“z”,同时ASCII码,h < z
便给出了结果 前面的字符小于后面的字符
但是此时前面的字符(“asdfhgfd” ),后面还由字符(gfd)未判断,而此时“asdfhgfd”应该是大于“asdfz”的。
突然就陷入到了这样的思维里面,大家帮帮忙把我拉出来把
最佳答案
2020-8-30 18:32:19
你对函数功能有误解吧!
strcmp(str1, str2)  是逐个比较两个字符串中字符的ASCII码的大小。一旦比较出大小就不再看后面的字符。
该函数不是比较两个字符串的长度大小


你若要比较两个字符串的长度大小需要用strlen获取字符串的长度,然后比较大小
#include <stdio.h>
#include <string.h>

int main()
{
    char *str1 = "c";
    char *str2 = "FishC.com";
    int t = strlen(str1)>strlen(str2)?1:0;
    printf("%d\n", t);
    
    getchar();
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-30 16:51:05 | 显示全部楼层

回帖奖励 +1 鱼币

strcmp函数判断到f后的字符“h”与“z”,同时ASCII码,h < z
便给出了结果 前面的字符小于后面的字符
后面就不再判断了
strcmp只判断第一个不同的然后就返回了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-30 16:53:27 | 显示全部楼层
baige 发表于 2020-8-30 16:51
strcmp函数判断到f后的字符“h”与“z”,同时ASCII码,h < z
便给出了结果 前面的字符小于后面的字符
后 ...

那我上面给出的那串代码,的执行结果,明显str1要小于str2,但是结果返回的确是 str1 > str2。如果就字符串大小比较功能的话 ,strcmp不就有了很多局限吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-30 17:06:23 | 显示全部楼层
冷回清风暖 发表于 2020-8-30 16:53
那我上面给出的那串代码,的执行结果,明显str1要小于str2,但是结果返回的确是 str1 > str2。如果就字符 ...


你是要比较长度的话用strlen求两个的长度,然后进行比较两个长度的大小
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-30 17:24:45 | 显示全部楼层

回帖奖励 +1 鱼币

冷回清风暖 发表于 2020-8-30 16:53
那我上面给出的那串代码,的执行结果,明显str1要小于str2,但是结果返回的确是 str1 > str2。如果就字符 ...
int strcmplen(char const* a, char const* b) {
    return strlen(a) - strlen(b);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-30 18:32:19 | 显示全部楼层    本楼为最佳答案   

回帖奖励 +1 鱼币

你对函数功能有误解吧!
strcmp(str1, str2)  是逐个比较两个字符串中字符的ASCII码的大小。一旦比较出大小就不再看后面的字符。
该函数不是比较两个字符串的长度大小


你若要比较两个字符串的长度大小需要用strlen获取字符串的长度,然后比较大小
#include <stdio.h>
#include <string.h>

int main()
{
    char *str1 = "c";
    char *str2 = "FishC.com";
    int t = strlen(str1)>strlen(str2)?1:0;
    printf("%d\n", t);
    
    getchar();
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-31 06:59:52 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-31 10:29:02 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-31 10:58:44 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-31 13:29:35 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-31 13:50:46 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-1 10:18:04 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-1 13:34:51 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-1 13:35:36 | 显示全部楼层
谢谢你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-4 16:25:02 | 显示全部楼层
问一下,vscode是怎样配置c/c++的?
我安装了c/c++插件,可是怎么配置?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-6 08:39:47 | 显示全部楼层
胡鸣谦 发表于 2020-9-4 16:25
问一下,vscode是怎样配置c/c++的?
我安装了c/c++插件,可是怎么配置?

vs不是安装完之后就能直接写C/c++吗..  新建一个c++空项目
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-6 10:57:51 | 显示全部楼层
冷回清风暖 发表于 2020-9-6 08:39
vs不是安装完之后就能直接写C/c++吗..  新建一个c++空项目

怎么运行???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-6 15:09:26 | 显示全部楼层

https://blog.csdn.net/iamsongyu/article/details/89630831
你参考下这个,百度上有很多教程。
我习惯直接创建一个c/c++空项目
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 02:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表