首字母大写--牛客
题目描述
对一个字符串中的所有单词,如果单词的首字母不是大写字母,则把单词的首字母变成大写字母。 在字符串中,单词之间通过空白符分隔,空白符包括:空格(' ')、制表符('\t')、回车符('\r')、换行符('\n')。
输入描述:
输入一行:待处理的字符串(长度小于100)。
输出描述:
可能有多组测试数据,对于每组数据, 输出一行:转换后的字符串。
示例1
输入
if so, you already have a google account. you can sign in on the right.
输出
If So, You Already Have A Google Account. You Can Sign In On The Right.
解题分析
对字符串进行扫描,并采用记录的方式将间隔符前面的字符数记录下来,判定后直接对小写字母进行更改。
需要注意的是以下几点:
1、对字符串的输入
用cin>>str 这种方法来接收字符串那么录入的str不能包含空格,否则它会按照空格将整个字符串切分成若干段。
如果你要是想输入带空格的字符串那就要用到getline()
#include <iostream> #include <string> using namespace std; string s; getline(cin,s);
2、对最后一个单词的处理,由于字符串的结尾使用的是 '\0'
在这里我使用下标标注最后一个字符,读取到最后一个单词。
另外还需要对最后一个单独字符做处理。
3、C中对字母大小写的转换
- 小写字母的ASCII 码大
- 大写字母的ASCII码小
- 大小写字母的ASCII 码相差32
- 数字的ASCII码比字母小 0字符为 48
最后代码如下:
1 #include <iostream> 2 #include <string> 3 using namespace std; 4 5 int main() 6 { 7 string s; 8 getline(cin,s); //对带间隔符的字符串输入 9 int count =0; 10 int i=0; 11 for(i=0;i<s.length();i++) 12 { 13 if(s[i]==' '||s[i]=='\t'||s[i]=='\r'||s[i] =='\n'||i==s.length()-1) 14 { //考虑最后一个单词 15 if(count!=0&&s[i-count]<='y'&&s[i-count]>='a') 16 s[i-count] = s[i-count]-32; 17 count=0; 18 } 19 else 20 count++; 21 } 22 if(s[i-1]<='y'&&s[i-1]>='a') //若最后一个单词是单独的字符 23 if(s[i-2]==' ') 24 s[i-1]-=32; 25 cout << s <<endl; 26 }
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何在 .NET 中 使用 ANTLR4
· 后端思维之高并发处理方案
· 理解Rust引用及其生命周期标识(下)
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 想让你多爱自己一些的开源计时器
· Cursor预测程序员行业倒计时:CTO应做好50%裁员计划
· 大模型 Token 究竟是啥:图解大模型Token
· 如何在 .NET 中 使用 ANTLR4
· 用99元买的服务器搭一套CI/CD系统