【题目】
一般我们用 strcmp可比较两个字符串的大小,比较方法为对两个字符串从前往后逐个字符相比较(按 ASCII码值大小比较),直到出现不同的字符或遇到 \0 为止。
如果全部字符都相同,则认为相同;如果出现不相同的字符,则以第一个不相同的字符的比较结果为准;如果两字符串长度不同,但所有相同位置的字符均相同,则认为较长字符串更大。
在有些时候,我们比较字符串的大小时,希望忽略字母的大小,例如 Hello 和 hello 在忽略字母大小写时是相等的。
请写一个程序,实现对两个字符串进行忽略字母大小写的大小比较。
【输入格式】
输入为两行,每行一个字符串,共两个字符串。
注意字符串中仅可能包含大小写字母和空格。
【输出格式】
如果第一个字符串比第二个字符串小,输出一个字符 <。
如果第一个字符串比第二个字符串大,输出一个字符 >。
如果两个字符串相等,输出一个字符 =。
【数据范围】
每个字符串的长度范围 [1,80]
【输入样例1】
Hello
hello
【输出样例1】
=
【输入样例2】
How are you
How old are you
【输出样例2】
<
【代码1】
#include <iostream> // 引入输入输出流库,用于输入输出操作
#include <string> // 引入字符串库,用于操作字符串
#include <cstring> // 引入C风格字符串操作库,提供strcmp函数
using namespace std; // 使用标准命名空间,避免std::
int main() // 主函数,程序入口
{
string a,b; // 声明两个字符串变量a和b
getline(cin,a); // 使用getline从输入流cin中读取一行文本到字符串a
getline(cin,b); // 同上,读取另一行文本到字符串b
// 将字符串a中的大写字母转换为小写
for (int i = 0; i < a.size(); i ++)
if (a[i] >= 'A' && a[i] <= 'Z') a[i] += 32;
// 将字符串b中的大写字母转换为小写
for (int i = 0; i < b.size(); i ++)
if (b[i] >= 'A' && b[i] <= 'Z') b[i] += 32;
int c; // 声明一个整型变量c,用于存储strcmp函数的返回值
c = strcmp(a.c_str(),b.c_str()); // 调用strcmp比较两个C风格字符串
// strcmp函数比较两个字符串,如果第一个字符串小于第二个字符串,返回值小于0;
// 如果两个字符串相等,返回值等于0;如果第一个字符串大于第二个字符串,返回值大于0。
if(c < 0) cout << "<"; // 如果c小于0,输出"<"
if(c == 0) cout << "="; // 如果c等于0,输出"="
if(c > 0) cout << ">"; // 如果c大于0,输出">"
return 0; // 程序结束,返回0
}
【代码2】
#include<iostream> // 引入输入输出流库,用于输入输出操作
using namespace std; // 使用标准命名空间,避免std::
int main() // 主函数,程序入口
{
string a, b; // 声明两个字符串变量a和b
getline(cin, a); // 使用getline从输入流cin中读取一行文本到字符串a
getline(cin, b); // 同上,读取另一行文本到字符串b
// 使用范围基于的for循环和引用来遍历字符串a的每个字符,并将其转换为小写
for (auto &c : a) c = tolower(c);
// 使用范围基于的for循环和引用来遍历字符串b的每个字符,并将其转换为小写
for (auto &c : b) c = tolower(c);
// 直接使用字符串重载的比较运算符来比较两个字符串
if (a == b) cout << '='; // 如果a等于b,输出'='
if (a > b) cout << '>'; // 如果a大于b,输出'>'
if (a < b) cout << '<'; // 如果a小于b,输出'<'
return 0; // 程序结束,返回0
}
【代码3】
#include <cstdio> // 引入C标准输入输出库,提供puts、fgets等函数
#include <cstring> // 引入C字符串库,提供strlen、strcmp等函数
int main(){
char a[100], b[100]; // 声明两个字符数组,用于存储输入的字符串
fgets(a, 100, stdin); // 从标准输入读取一行文本到字符数组a,最多读取99个字符(留一个位置给'\0')
fgets(b, 100, stdin); // 同上,读取另一行文本到字符数组b
// 如果a的最后一个字符是换行符'\n',将其替换为字符串结束符'\0'
if(a[strlen(a)-1] == '\n') a[strlen(a)-1] = 0;
// 如果b的最后一个字符是换行符'\n',将其替换为字符串结束符'\0'
if(b[strlen(b)-1] == '\n') b[strlen(b)-1] = 0;
// 将字符串a中的大写字母转换为小写
for(int i = 0; a[i]; i++)
if(a[i] >= 'A' && a[i] <= 'Z')
a[i] += 32;
// 将字符串b中的大写字母转换为小写
for(int i = 0; b[i]; i++)
if(b[i] >= 'A' && b[i] <= 'Z')
b[i] += 32;
int t = strcmp(a, b); // 使用strcmp函数比较两个字符串
if(t == 0) puts("="); // 如果字符串相等,输出"="
else if(t < 0) puts("<"); // 如果a小于b,输出"<"
else puts(">"); // 如果a大于b,输出">"
return 0; // 程序结束,返回0
}