字符串大小写转换
字符串大小写转换
掌握字符串函数的使用:大小写转换。
英文字母在 ASCII 里大写 A–Z 与小写 a–z 各成一段,对应码值相差 32。转换可以逐字符做:大写加 32 变小写,小写减 32 变大写;也可用 <cctype> 里的 toupper、tolower(参数按 unsigned char 传入更稳妥)。非字母字符应保持不变。string 没有「整串一次改完」的标准成员,三级写法就是循环扫每个 s[i]。
客观题会给一个短串,问全部改大写或改小写后的结果,或判断「空格要不要变」。编程题常见:统计大写个数、把标题改成规定大小写、只转换字母。认证标准以 C++11 为准,不要依赖编译器扩展的整串 API。
string s = "Hi, C++";
for (int i = 0; i < (int)s.size(); ++i) {
if (s[i] >= 'A' && s[i] <= 'Z') s[i] = s[i] - 'A' + 'a';
else if (s[i] >= 'a' && s[i] <= 'z') s[i] = s[i] - 'a' + 'A';
}
// 得到 "hI, c++"
先判断是不是字母再加减 32;对标点或数字做加减会得到无关字符。toupper 的返回值是 int,赋回 s[i] 时记得转成 char。
在下列代码的横线处填写( ),可以使得输出是 GESP IS INTERESTING。
int main()
{
string str="gEsP is Interesting";
int x = str.length();
for(int i = 0; i < x; i++)
if ((str[i]>='a') && (str[i]<='z'))
________________________;
cout << str << endl;
cout << endl;
return 0;
}
原文保真说明:来源改写 1 处(照原卷保留,未作修改)
来源题面被改写版式题干
原卷作
________________________;,常规写法应为___________________;洛谷压短填空下划线并去掉 length() 后空行;已按官方 PDF 第 3 页列位恢复。
已按官方原件恢复:现为原卷原文
下列程序最后输出的是( )
int a=65;
cout<<tolower(a)<<endl;
原文保真说明:来源改写 1 处(照原卷保留,未作修改)
来源题面被改写版式题干
原卷作
int a=65;洛谷有题在 = / << 两侧加空格;已按官方 PDF 第 3 页列位恢复。
已按官方原件恢复:现为原卷原文
char a='A';
a=a+32;
cout<<(int)a<<endl;
将输出 97
词频统计
C++时间 1 s内存 512 MB标准输入输出
在文本处理中,统计单词出现的频率是一个常见的任务。现在,给定 n 个单词,你需要找出其中出现次数最多的单词。在本题中,忽略单词中字母的大小写(即 Apple、apple、APPLE、aPPle 等均视为同一个单词)。
请你编写一个程序,输入 n 个单词,输出其中出现次数最多的单词。
输入格式
第一行,一个整数 n,表示单词的个数;
接下来 n 行,每行包含一个单词,单词由大小写英文字母组成。
输入保证,出现次数最多的单词只会有一个。
输出格式
输出一行,包含出现次数最多的单词(输出单词为小写形式)。
样例
6 Apple banana apple Orange banana apple
apple
数据范围
对于所有测试点,1≤n≤100,每个单词的长度不超过 30,且仅由大小写字母组成。
你的代码(C++)
提交后由评测机编译运行,结果见下方76 B / 64 KB
判题结果
如果字符串 s 的值是 GESP,以下代码 s 的最后结果是( )
for (int i = 0; i < s.length(); i++) {
s[i] = toupper(s[i] + i);
}
字符转换
C++时间 1 s内存 512 MB标准输入输出
小杨同学有一串字符,里面可能有:
- 大写字母,比如 A、B、C
- 小写字母,比如 a、b、c
- 数字,比如 0、1、2
现在小杨同学想把这串字符变一变,规则如下:
- 如果是大写字母,就变成对应的小写字母;
- 如果是小写字母,就变成对应的大写字母;
- 如果是数字,就变成
*。
请你按照这个规则,帮小杨把整串字符转换好。
输入格式
输入一共有 2 行。
第一行:一个整数,表示这串字符一共有多少个字符。
第二行:一串连续的字符,中间没有空格。
输出格式
输出转换后的字符。
注意:输出时字符之间不要加空格。
样例
5 aBc98
AbC**
原来的字符是:
aBc98
从左到右一个一个看:
- a 是小写字母,所以变成 A;
- B 是大写字母,所以变成 b;
- c 是小写字母,所以变成 C;
- 9 是数字,所以变成
*; - 8 是数字,所以变成
*。
所以最后输出:
AbC**
数据范围
字符个数不会超过 1000 个。
每个字符只会是大写字母、小写字母或数字。
你的代码(C++)
提交后由评测机编译运行,结果见下方76 B / 64 KB