单词统计与单词首字母大写

之前刷OJ也刷过三四道和单词统计或单词首字母的题。今天又遇到了类似的,却比以前更简单的方法。放在博客上备忘。

 

题目大致的意思:用户输入字符串,统计输入的单词个数,单词以空格隔开。并且将每个单词的首字母大写。

 

之前一贯的思路:首先如果第一个字符为字母,则count++,并让首字母大写,然后在for循环判断,每个空格后面的字母一定是另外一个单词,count++并且把首字母大写。如果有多个空格(即空格后还是空格),则不做任何操作。代码如下:

 

//  main.c

//  统计单词个数并将首字母大写

//

//  Created by DXY on 16/7/28.

//  Copyright © 2016 DXY. All rights reserved.

//

 

#include <stdio.h>

 

int main(int argc, const char * argv[]) {

    char s[100];

    int i,c=0;

    gets(s);

    //查案第一个字符是否为字母,如果是,c++

    //并且判断首字母是否大写,如果不大写则变为大写

    if(s[0]>='a' && s[0]<='z'){

        c++;

        s[0] -= 32;

    }else if(s[0]>='A' && s[0]<='Z'){

        c++;

    }

    for(i=0;s[i]!='\0';i++){

        if(s[i]==' '){   //如果本字符为空格

            //如果本字符为空格且下个字符为字母,则c++,并且判断是否为小写字母,把小写字母改为大写

            if(s[i+1]>='a' && s[i+1]<='z'){

                c++;

                s[i+1] -= 32;

            }else if(s[i+1]>='A' && s[i+1]<='Z'){

                c++;

            }

        }

    }

    printf("单词个数为:%d\n",c);

    puts(s);

    return 0;

}

 

另外一个思路:默认字符串里除了空格就是字母,那么设置一个标志变量,一开始为0,以表示一开始就是字母的情况,如果遇到空格,则标志置0,表示接下来有新单词了。如果一直有空格,则会忽视(因为一直在左标志置0操作)。如果下一个字符不为空格且标志==0,则表示这是空格后的字母,则counter++,且把首字母大写。   //解释的不太好,看不太懂的直接看代码  :)

 

//  main.c

// 

//  计算字母个数简单算法

//  Created by DXY on 16/7/28.

//  Copyright © 2016 DXY. All rights reserved.

//

 

#include <stdio.h>

 

int main(int argc, const char * argv[]) {

    int words = 0,i,c=0;   //words是一个标志变量

    char s[100];

    gets(s);

    for(i=0;s[i]!='\0';i++){

        if(s[i] == ' '){

            words = 0;   //如果遇到空格,就标志为0,下个字符若遇到的是空格,则还执行相同语句

                         //若遇到字母,则到else if

        }else if(words == 0) {//在已经遇到过空格的情况下(words0),下次如果遇到的不是空格,就一定是字母。所以执行c++

            c++;

            s[i] -= 32;

            words = 1;    //统计过这个单词,重新把标志置1

        }

    } 

  puts(s);

    printf("单词个数为:%d\n",c);

    return 0;

}

posted @ 2016-07-28 23:25  Accepted.DXY  阅读(456)  评论(0编辑  收藏  举报