c语言字符数组如何比较?

 我来答
滟丽00
高粉答主

2019-05-29 · 繁杂信息太多,你要学会辨别
知道答主
回答量:1487
采纳率:0%
帮助的人:24.2万
展开全部

1、C语言中字符是使用char来定义的,使用关系运算符(>,<,=)即可对字符进行比较。在编译器中定义a、b两个字符型变量,并为其赋值,按照如图所示编写代码。

2、运行代码后,我们可以得到如图所示结果。1表示条件为真,0表示条件为假。

3、字符串使用char[]来定义,可以使用strcmp()来判断大小,也可以使用关系运算符(>,<,=)判断大小。

4、使用strcmp()对字符串进行比较大小时,需要引入头文件string.h

5、运行代码后,我们可以得到如图所示结果。使用strcmp进行判断时,返回结果为0,表示两个字符串相等。返回结果大于0,表示第一个参数字符串大。返回结果小于0,表示第二个参数字符串大。

风若远去何人留
推荐于2017-09-24 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450125
专业C/C++软件开发

向TA提问 私信TA
展开全部

C语言的字符数组有两种,比较方式也有所不同。

1 字符串。

C语言的字符串是用字符数组表示的。约定以'\0'(ascii码0)作为结尾标记。

对于字符串类的字符数组,可以用string.h中的strcmp函数进行比较。

int strcmp(char *str1, char *str2);

其比较规则为:

a, 从左向右依次比较每个元素;

b, 如果出现str1的元素ascii码比较大,则返回1;如果出现str2元素ascii码比较大,则返回-1。如果相等,则继续。

c, 如果一直相等,直到遇到\0,这时检查是否均为\0,如果均为\0,那么返回0;

d, 如果str1到\0,而str2没到,返回-1; 否则返回1。

总结规则就是,如果str1比str2大,返回1;如果相等,返回0;如果str1小,返回-1。


2 不带\0结束的字符数组。

对于此类数组,没有库函数可供使用,只能自己写函数进行比较。规则可以仿照strcmp的规则。

由于没有\0作为结束,所以参数中必须传入每个数组的元素个数。

int char_array_cmp(char *s1, int l1, char *s2, int l2)
{
    int lmin = l1>l2? l2:l1; //较小长度者。
    int i;
    
    for(i = 0; i < lmin; i ++)
        if(s1[i] > s2[i]) return 1;
        else if(s1[i] < s2[i]) return -1;
    
    //运行到这里,表示所有已判断元素均相等。
    if(l1 == l2) return 0;
    if(l1 > l2) return 1;
    
    return -1;//l1 < l2的情况。
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
178rtrdux
2011-07-06 · TA获得超过2991个赞
知道大有可为答主
回答量:4327
采纳率:0%
帮助的人:0
展开全部
首先,C必然定义为字符数组,C语言没有定义字符串的关键字,C语言用字符数组处理字符串。如果需要动态长度字符串必须用字符指针实现。我写了一个类似的程序。
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(void) {
const int SIZE_INC=16;
char *a="abcd";
char *b="bcdef";
char *astr, *cptr;
char ch, ich;
int csize=0, cread=0;
// 读入未知长度字符串,以回车或者EOF结束
printf("Input a string:\n");
cptr = astr = (char *)malloc(SIZE_INC);
csize = SIZE_INC;
ich = getchar();
for (;;) {
if (ich == '\n' || ich == EOF)
ch = '\0';
else
ch = ich;
if (cread == csize) {
astr = (char *)realloc(astr, csize + SIZE_INC);
csize += SIZE_INC;
cptr = astr + cread;
}
*cptr = ch;
if (ch == '\0') break;
cread++; cptr++;
ich = getchar();
}
if (!strcmp(astr,a))
printf("The string you input equals string a.\n");
else if (!strcmp(astr,b))
printf("The string you input equals string b.\n");
else
printf("Your string is: %s\n",astr);
system("pause");
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友0cc4d54
2011-07-05
知道答主
回答量:5
采纳率:0%
帮助的人:3.6万
展开全部
这个应该挺简单吧 如果是string型 有个比较函数cmp(string a,string b)
如果是char 型 就用个循环 前提是两个数组长度一样
例: char a[n],b[n]
int s=0;
for(int i=0;i<n;i++)
{

if(a[i]==b[i]) {s++;} //s是对某位上相等的进行计数;
} //s如果与n相等就说明数组相等,反之不是
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
就着疼776
2011-07-05 · TA获得超过8万个赞
知道大有可为答主
回答量:3.2万
采纳率:0%
帮助的人:4190万
展开全部
百度登陆居然被屏蔽了。。。
答案已经打出来了,还是匿名发表吧,希望能帮到你:)
By way_du

假设有两个字符数组: char a[10],b[13];
int i=0;
bool check=true;
while (i<10&&check==true)
{
if (a[i]==b[i]) i++;
else
{
check=false;
if (a[i]>b[i]) cout <<"第一个字符数组大于第二个字符数组。";
else cout << "第二个字符数组大于第一个字符数组。";
}
}
if (check==true) cout << "第二个字符数组大于第一个字符数组。";
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式