codeup 100000580问题 B: 首字母大写

codeup 100000580问题 B: 首字母大写

题目描述

对一个字符串中的所有单词,如果单词的首字母不是大写字母,则把单词的首字母变成大写字母。
在字符串中,单词之间通过空白符分隔,空白符包括:空格(’ ‘)、制表符(’\t’)、回车符(’\r’)、换行符(’\n’)。
输入

输入一行:待处理的字符串(长度小于100)。
输出

可能有多组测试数据,对于每组数据,
输出一行:转换后的字符串。
样例输入 Copy

if so, you already have a google account. you can sign in on the right.

样例输出 Copy

If So, You Already Have A Google Account. You Can Sign In On The Right.

    本题属于字符串操作类简单题目,思路较为简单,但是实际编程有一些边界问题注意处理。
    思路分为如下几步:
    1>用一个字符串ch保存输入的任意待处理字符串,之后以单词为分割将这个串读取进一个二维字符数组str保存起来为了下一步按单词处理。
    2>遍历字符串数组str,按题目要求处理,具体转化检查每个单词首字母,如果不是大写字母转化即可。
    3>输出str即可。
    代码如下:
#include <stdio.h>
#include <string.h>
#define max0 101
char ch[max0];
char str[30][30];
int main() {
    while (gets(ch)) {
        int len=strlen(ch);
        int i,r=0,h=0;   //r.h分别控制str的行和列,每行即为一个字符串(单词),每行的每列即为单个字符
        for(i=0; i<=len; i++) {
            if(ch[i]!=' '&&ch[i]!='\t'&&ch[i]!='\n'&&ch[i]!='\r') //过滤单词之间的空白符
                str[r][h++]=ch[i];     //不是空白符,则赋值字符
            else {
                str[r][h]='\0';     //是空白符则意味着一个单词结束,赋\0
                r++;            //开始下一个单词
                h=0;            //开始下一个单词的第一个字符
            }
        }
        for(i=0; i<=r; i++) {      //转化大写字母
            char c=str[i][0];      //保存每个单词首字符
            if(c>90)               //90为Z的ASCLL值 A-Z(65-90),a-z(97-122),c大于90即为小写字母
                str[i][0]=c-32;    //转化
        }
        for(i=0; i<=r; i++) {      //输出
            if(i==r)
                printf("%s\n",str[i]);
            else
                printf("%s ",str[i]);
        }
    }
    return 0;
}

运行结果:
运行结果 几个注意事项
1>本题的意思单词和标点符号是紧挨着,比如account. 所以这种情况即为一个单词
2>`

for(i=0; i<=len; i++) {
            if(ch[i]!=' '&&ch[i]!='\t'&&ch[i]!='\n'&&ch[i]!='\r') //过滤单词之间的空白符
                str[r][h++]=ch[i];     //不是空白符,则赋值字符
            else {
                str[r][h]='\0';     //是空白符则意味着一个单词结束,赋\0
                r++;            //开始下一个单词
                h=0;            //开始下一个单词的第一个字符
            }
        }
这段转化,i为0-len,不是0-len-1,否则最后一个单词少一个\0,输出时会有错误
如下:(读者自行理解为什么会有这种情况)

3> str[20][20]和ch[ ]数组尽量在main函数外面声明。

发布了1 篇原创文章 · 获赞 0 · 访问量 32

猜你喜欢

转载自blog.csdn.net/yw906002599/article/details/104372595
今日推荐