文章

4

粉丝

174

获赞

1

访问

2.2k

头像
首字母大写 题解:(C++)奇怪的解决办法。
P1240 北京大学机考题
发布于2024年3月23日 14:52
阅读数 608

 解题思路:(1)题目输入格式为一行未处理的字符串,我们可以使用char或者string两种变量类型来容纳这串字符。

根据题目下的示例我们可以知道输入的字符串中是存在括号的,这个时候我们不能简单的使用cin来获取这个字符串,因为cin在获取数据时遇到空格回车会自动截止,不能够把所需要的输入数据全部获取,所以这个时候C++我们可以采用行获取方式getline(cin, x);而C可以采用gets(x);这里的x为已定义变量的变量名。

(2)获取到输入数据之后呢,我们根据题目所给我们的提示判断。很明确,在那四种空白符后的单词都是首字母,即都需要大写。

我们可以先设置一个标识的变量,我这里用了一个bool变量rv,true表示大写,false表示小写。

若当前字符满足两个条件时候,将它改为大写:(1)该字符是小写字母;(2)标识变量为true。

由于在Ascall码表中,字母的小写比大写的位值多了32,所以我们将需要改写的小写字母减去32即可。

--开始我ac60的时候我还在想要不要写上‘!’,‘:’,‘“‘,但发现加了也没用,是我想多了=m=

代码如下:

#include<iostream>
#include<cstring>
using namespace std;

int main(){
    string str;
    bool rv = true;        //判断下一个字符是否需要大写,由于第一个字符前什么东西都没有,我们让它的初值为true,也即第一个字符大写

    while(getline(cin, str)){
        for(int i = 0; i < str.length(); i++){
            if((str[i] >= 'a' &...

登录查看完整内容


登录后发布评论

1 条评论
Djiangxu
2024年3月23日 14:54

好啦,把小写改大写下面的rv = false;删除不影响结果,但下面判断赋值的那个不能删除。

赞(0)