(strcmp)两个字符串长度不同时如何比较?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(strcmp)两个字符串长度不同时如何比较?相关的知识,希望对你有一定的参考价值。
在C中可以用strcmp比较两个字符串的大小。但具体怎么比较我不太了解,比如字符串t="CDEF"字符串s=“QTHRG”这时候strcmp(t,s)<0不成立?为什么?
参考技术A 你好!!!举例:
t="CDEF"字符串s=“QTHRG”
首先编译器会把t的第一元素和s的第一个元素比较,要是前者大于后者,比较就结束,返回一个大于o的数,要是后者大于前者,返回小于0 的数,要是相等,就把t的第2元素和s的第2个元素比较,重复刚才的过程。
t的第一个元素是‘c’,显然没有‘Q’,那就比较结束,返回一个小于0的数。本回答被提问者采纳
如何在不使用 strcmp 和方括号的情况下比较字符串?
【中文标题】如何在不使用 strcmp 和方括号的情况下比较字符串?【英文标题】:How to compare string without using strcmp and square brackets? 【发布时间】:2016-02-11 01:40:55 【问题描述】:例如,我有一个结构数组,其中包含很多名称,并且我有一个指向该结构的指针。而且我有一个输入让用户输入名称以匹配结构中的名称我应该怎么做而不使用字符串并且只使用指针?
struct people
char name[20];
people list[10];
people *ptr;
ptr = list;
char lists[20];
char *inpu;
inpu = lists;
cout << "Input name";
cin >> inpu;
我试过用这个,但效果不好。
If ( inpu == (*ptr).name)
cout << "1";
else cout << "2";
【问题讨论】:
不,即使它们具有相同的文本,它们也不是相同的字符串,因此也不是相同的指针。 是的,我尝试计算输入名称和结构名称指针指向的结果,它们显示相同,但它从来没有 cout 1。我该如何纠正它?你能帮我吗 我想尝试用指针解决它的另一种方法 @Hong 所以继续 - 去做吧。制定限制并要求其他人完成有什么意义? 使用关系运算符将字符数组转换为std::string
比较。
【参考方案1】:
如果你不想使用 strcmp,请使用 here 中的完全notstrcmp:
int totallynotstrcmp(const char* s1, const char* s2)
while(*s1 && (*s1==*s2))
s1++,s2++;
return *(const unsigned char*)s1-*(const unsigned char*)s2;
【讨论】:
(unsigned char)*s1 - (unsigned char)*s2
会更短更容易阅读
迂腐:(*(const unsigned char*)s1 > *(const unsigned char*)s2) - (*(const unsigned char*)s1 < *(const unsigned char*)s2);
不会溢出。处理具有相同范围的罕见unsigned char, unsigned
。以上是关于(strcmp)两个字符串长度不同时如何比较?的主要内容,如果未能解决你的问题,请参考以下文章
c语言中strcmp函数 如果两个字符串长度不一样时要怎么比较大小啊?