编程实现对键盘输入的两个字符串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);
}
}
}