内蒙古大学专硕892初试(2021/3)

编程实现对键盘输入的两个字符串s1和s2的字典序比较。(字符串都不含空格且长度在100以内)。若s1和s2相等,输出0;若它们不想等,则指出其第一个不同字符的ASCII码的差值;若果s1>s2,则差值为证;若果s1<s2,则差值为负。

首先要明白什么事字典序比较,就是利用ASCII值进行比较。

以"abcd"、"acbd"这两个例子进行比较(为了方便对三个字符串进行简称为1、2),字典序比较是先比对第一个字符,1和2第一个字符相同,就比较下一个字符,如果下一个字符也相同就一直比对到不相同,如果直到结束都不相同就输出0,b和c字符不相同,就用两个字符串第一个字符不相同的1的ASCII码值减2的ASCII值,然后输出差值。

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>

using namespace std;
char s1[100], s2[100];

int main(){
    int res = 0;//用于存放最终结果
    printf("请输入两个字符个数在100以内的字符串:");
    gets(s1);//读取字符串的输入,遇到空格就进行下一个字符串
    gets(s2);
    char *p = s1, *q = s2;//定义两个指针分别指向字符串,指针指向头部
    while(*p && *q){
        if(*p == *q){//比较两个字符串的ASCII码值,如果相等就比较下一位,直到结束
            ++p;
            ++q;
        }
        else if(*p > *q){//如果p > q,结果就是p-q
            res = *p - *q;
            printf("%d",res);
            break;
        }
        else if(*p < *q){//如果q > p,结果就是p - q
            res = *p - *q;
            printf("%d",res);
            break;
        }
        else{
            printf("程序非法!");
            exit(0);
        }
        //三种特殊情况处理
        if(*p &&*q){
            printf("0");
        }
        if(!(*p)){
            printf("%d",-*q);
        }
        if(!(*q)){
            printf("%d",*p);
        }
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值