筷子与饺子
Published on 2019-11-11 04:08 in 暂未分类 with 筷子与饺子

首字母大写--牛客

题目描述

对一个字符串中的所有单词,如果单词的首字母不是大写字母,则把单词的首字母变成大写字母。 在字符串中,单词之间通过空白符分隔,空白符包括:空格(' ')、制表符('\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 }
复制代码

 

 

posted @   筷子与饺子  阅读(714)  评论(0编辑  收藏  举报
编辑推荐:
· 如何在 .NET 中 使用 ANTLR4
· 后端思维之高并发处理方案
· 理解Rust引用及其生命周期标识(下)
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
阅读排行:
· 想让你多爱自己一些的开源计时器
· Cursor预测程序员行业倒计时:CTO应做好50%裁员计划
· 大模型 Token 究竟是啥:图解大模型Token
· 如何在 .NET 中 使用 ANTLR4
· 用99元买的服务器搭一套CI/CD系统
点击右上角即可分享
微信分享提示