C语言:用指针实现字符串大小的比较,应该怎样做呢?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言:用指针实现字符串大小的比较,应该怎样做呢?相关的知识,希望对你有一定的参考价值。

#include<stdio.h>
void stringcompare(char *a,char *b);
main()


char a[10];
char b[10];
printf("请输入字符串");
gets(a);
gets(b);
stringcompare(a,b);
printf("%s",b);


void stringcompare(char *a,char *b)
if(*a==*b)
a++;
b++;



我只能写出这种框架啦

字符串比较,可采用循环遍历字符串,用对应位置的指针所指向的字符进行比较,当相等时,循环,遇到不等或其中一个字符串结束时,结束循环,返回对应指针的对应的字符的差值,根据差值判断两个字符串的大小:

    返回值大于0,则前串大,

    返回值小于0,则前串小,

    返回值等于0,两个字符串相等。

参考代码:

#include<stdio.h>
int stringcompare(char *a,char *b)

while( *a && *a == *b )

a++;
b++;

return *a-*b ;


int main()

int ret;
char a[10];
char b[10];
printf("请输入字符串a: ");
gets(a);
printf("请输入字符串b: ");
gets(b);
ret=stringcompare(a,b);
if ( ret > 0 )
printf("a>b\\n");
else if ( ret < 0 )
printf("a<b\\n");
else
printf("a=b\\n");
    system("pause");
    return 0;

运行结果:

请输入字符串a: abcde

请输入字符串b: acd

a<b


请输入字符串a: acd

请输入字符串b: abcde

a>b


请输入字符串a: abc

请输入字符串b: abc

a=b

参考技术A 字符串比较,可采用循环遍历字符串,用对应位置的指针所指向的字符进行比较,当相等时,循环,遇到不等或其中一个字符串结束时,结束循环,返回对应指针的对应的字符的差值,根据差值判断两个字符串的大小:
返回值大于0,则前串大,
返回值小于0,则前串小,
返回值等于0,两个字符串相等。
参考代码:
#include<stdio.h>
int stringcompare(char *a,char *b)

while( *a && *a == *b )

a++;
b++;

return *a-*b ;

int main()

int ret;
char a[10];
char b[10];
printf("请输入字符串a: ");
gets(a);
printf("请输入字符串b: ");
gets(b);
ret=stringcompare(a,b);
if ( ret > 0 )
printf("a>b\n");
else if ( ret < 0 )
printf("a<b\n");
else
printf("a=b\n");
system("pause");

return 0;

运行结果:
请输入字符串a:
abcde
请输入字符串b:
acd
a<b
请输入字符串a:
acd
请输入字符串b:
abcde
a>b
请输入字符串a:
abc
请输入字符串b:
abc
a=b
参考技术B #include<stdio.h>
int stringcompare(char *a,char *b);
main()

char a[10];
char b[10];
printf("请输入字符串");
gets(a);
gets(b);
printf("%d",stringcompare(a,b));


int stringcompare(char *a,char *b)

do
if(*a<*b) return -1;
else if(*a>*b) return 1;
a++;
b++;
while(*a&&*b);
return 0;
参考技术C #include<stdio.h>
int stringcompare(char *a,char *b)

int ret = 0;
while(!(ret = *a - *b) && *b)
a++, b++;
if(ret<0)ret = -1;
else if(ret>0)ret = 1;
return ret;

void main()


char a[10];
char b[10];
printf("请输入字符串\n");
gets(a);
gets(b);
int k = stringcompare(a,b);
if(k>0)printf("%s>%s\n",a,b);
else if(k==0)printf("%s=%s\n",a,b);
else printf("%s<%s\n",a,b);

请问C++中两个字符串的大小是怎样比较的?

C++中两个字符串的大小比较方法如下:

1、首先,定义一个整型变量j,保存判断的结果。

2、接着,定义两个字符串变量,保存判断的字符串。

3、输入两个字符串,保存在变量s1和s2中。

4、比较字符串s1和s2的大小,保存在变量j中。

5、根据判断结果j的值,输出两个字符串的比较结果。

6、用compare函数比较两个字符串,当s1大于s2时返回值大于0,当s1等于s2时返回值等于0,当s1小于s2时返回值小于0。

参考技术A

会先比较长度,如果长度大那自然就大,

如果长度相等,会去从左到右逐个比较ascii码的大小,

如果相等则比较下一个,直到有结果。

本回答被提问者和网友采纳
参考技术B

如果是std::string的话,可以直接用关系符号,例如小于号(<),比较。

如果是传统的C字符串(const char[])的话,和C语言一样,调用strcmp比较,小于返回负数,大于返回正数,等于返回0。

例如

#include <cstring>
#include <iostream>
#include <string>

int main()


    std::string s = "abc";
    std::string t = "def";

    const char u[] = "ghi";
    const char v[] = "jkl";


    std::cout << s << (s < t ? "<" : ">=") << t << std::endl;
    std::cout << u << (std::strcmp(u, v) ? "<" : ">=") << v << std::endl;

    return 0;

输出是

abc<def
ghi<jkl

注意无论用哪种方法,顺序规则都是字典规则(lexicographical order)。也就是:

    从前往后,逐位比较,第一个不同的字符,按照char的顺序比较(例如字母a小于字母b)

    如果第一个字符串是第二个字符串的子列,例如“abc”和“abcde”,则前者小于后者

    空字符串小于其它所有字符串

    当且仅当字符串长度和每个位置上字符都相同,字符串相等

字典规则示例:

以下程序给字符串排序 01, 1, 0, 0000, 10, 100 从小到大排序

#include <algorithm>
#include <iostream>
#include <string>
#include <vector>

int main()


    std::vector<std::string> vec  "01", "1", "0", "0000", "10", "100";
    std::sort(vec.begin(), vec.end());
    for (auto elem : vec)
        std::cout << elem << " ";

    return 0;

输出是

0 0000 01 1 10 100

注意按照字典规则,0000排在1前面,那个说先看字符串长度的答案纯属误人子弟。

参考技术C strcmp(str1,str2);
如果str1比str2大,则上表达式>0,等则=0,小则<0。
参考技术D 不是strcmp吗?

以上是关于C语言:用指针实现字符串大小的比较,应该怎样做呢?的主要内容,如果未能解决你的问题,请参考以下文章

C语言 怎样设计一个比较3个数大小的程序,跪求~~~

c语言中怎样实现对二维数组元素进行赋值并输出。

c语言实现用户指令实现 用户输入字符串 然后根据要求执行 怎么做呢

一个c语言的问题:怎样比较字符串的大小。。。。请教高手啊。。。。

C语言怎样定义变长数组

c++编程中怎样用strncmp函数计算两个字符串的数目,并比较大小。