整理药名
依旧考察字符串中的大小写转换
用for循环依次读取药名并处理即可;在转换大小写时,我定义了一个布尔值用于判定是否处理过第一个字符。我们只需要在转换之前bool 定为false;在转换完第一个字符后重新赋值为true即可;
注意:题中说如果第一个不是字母,则全部小写。我利用了toupper/tolower函数只针对字母字符的特性,尽管处理的第一个字符不是字母,布尔值依旧更新为true,完成了题目要求。
#include <iostream>
#include <bits/stdc++.h>
#include <cctype>
using namespace std;
int main()
{
int n;
string yaoname;
cin >> n;
for (int i = 0;i < n;i++)
{
cin >> yaoname;
bool foundFirstLetter = false;//用于条件判定
for(char &x : yaoname)
{
x = toupper(x);//第一个字母大写
if(!foundFirstLetter) foundFirstLetter = true;//处理完第一个字符后,判定找到了第一个字母
else x = tolower(x);//其他字母转小写
}
cout << yaoname << endl;
}
return 0;
}
略大小写的字符串比较
简单存储数据,转换大小写,进行比较并输出即可。
注意:
1.strcmp(a,b)中a,b期望类型为“const char*”;且strcmp返回的是ASCII码的差值。
2.".c_str()"能够实现“string类型”到“const char*类型”的转化。
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s1,s2;
//输入字符串并转化为小写
cin >> s1;
cin >> s2;
for(char &x : s1){x = tolower(x);}
for(char &x : s2){x = tolower(x);}
// cout << s1 << " " << s2 << endl;
//注意strcmp(a,b)中a,b期望类型为const char*;且strcmp返回的是ASCII码的差值
if(strcmp(s1.c_str(),s2.c_str()) == 0){cout << "=" << endl;}
//s1,s2此时为string类型,故利用".c_str()"实现转化
else if(strcmp(s1.c_str(),s2.c_str()) < 0){cout << "<" << endl;}
else cout << ">" << endl;
return 0;
}