现在的位置: 首页 > 综合 > 正文

HDU 2026 首字母变大写

2018年04月29日 ⁄ 综合 ⁄ 共 954字 ⁄ 字号 评论关闭

 


Problem Description
输入一个英文句子,将每个单词的第一个字母改成大写字母。
 

Input
输入数据包含多个测试实例,每个测试实例是一个长度不超过100的英文句子,占一行。
 

Output
请输出按照要求改写后的英文句子。
 

Sample Input
i like acm i want to get an accepted
 

Sample Output
I Like Acm I Want To Get An Accepted
 

Author
lcy
 
解题思路:
     这道题,是当时学C的时候,就没有解决的一道题,真是感觉自己大一学的真恶心。
     当时出现的问题是什么呢?其实,问题就是不知道对于一个字符流,该怎么从其中提取出来单词呢?原来SB到是不是有一个特定的函数对于一个字符串进行检测
就能得到各个单词QAQ,现在想起来自己真心SB,,,
   其实,对于一个字符串来说,要想提取出其中的单词,可以说是很简单的,那就是判断空格个数,从空格为突破口来解决单词查找的问题,比如说,
   (1)  a  bdsdssa  asd ad   ,这个字符串中有3个空格,那么总共就会有4个单词了,所以说,一个字符串中单词的个数的等于的是空格的个数加1了!
那么怎么才能从一个字符串中把所有的字符都提取出来呢?其实,也不难,仔细想想也很简单,那就是写一个if(s[i]!=' '&&s[i-1]==' '),这个条件的出现
就会很容易的把每个单词的首字母提取出来了,然后对他想怎么进行操作就可以了,这道题目是让小写变成大写,那么我们就用a[i] - 32就会把小写字母
变成大写了。
   (2) 好了,这道题,就是这样了,希望大家和我一样有所收获,慢慢的积累,慢慢的学习,肯定会成为神犇的!
代码:
# include<cstdio>
# include<iostream>
# include<cstring>

using namespace std;

# define MAX 123

char s[MAX];

int main(void)
{
    while ( gets(s) )
    {
        int len = strlen(s);
        if ( s[0] != ' ' )
            s[0]-=32;
        for ( int i = 1;i < len;i++ )
        {
            if ( s[i]!=' '&&s[i-1] ==' ' )
                    s[i]-=32;
        }
        puts(s);
    }



    return 0;
}

抱歉!评论已关闭.