黑马程序员技术交流社区

标题: 看到一个帖子,写检测字一句话有几个单词 和单词首字母大小写 [打印本页]

作者: 陆露    时间: 2015-9-15 12:08
标题: 看到一个帖子,写检测字一句话有几个单词 和单词首字母大小写
应该是基础测试题  我新手刚注册好 在家自学 OC还没学完不知道还能赶上12期不
试下 写的不好请大神纠正
思路:
创建一个字符串 接受字符串  
循环输出
判断如果是字母和空格就进入循环
判断如果不是字母和空格就直接输出当前字符
判断首字母是否为小写 如果是就改成大写并且单词数+1
判断前一个字符和当前字符是不是空格如果是空格就输出当前空格 结束循环
判断前一个字符是否为空格 和当前字符是否为大写字母 如果是大写字母直接输出当前字符 结束循环 单词+1
判断前一个字符是否为空格 和判断额当前字符是否为小写字母 如果是小写改大写 单词+1
打印字符
打印换行
打印单词数量
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        char ch[100];
        int count = 0;
        printf("请用美国输入法输入一句话...\n");
        gets(ch);
        for(int i = 0; ch[i]!='\0'; i++)
        {
            if((ch[i] >= 'a' && ch[i] <= 'z') || (ch[i] >= 'A' && ch[i] <= 'Z') || ch[i] == ' ')//如果是英文字母和空格进入 如果不是就直接输出
            {
            if(ch[0] >= 'a' && ch[0] <= 'z')//如果首字母是小写 就改成大写
            {       count++;//单词数 +1 因为是判断字母前一个字符为空格的所以首歌单子要加1 如果首歌单词前面是空格 那么下面会自动+1的
                ch[0]= ch[0] - 32;
            }
            else if(ch[i-1]== ' ' && ch[i] == ' ')//判断如果前一个字符时空格 当前字符也是空格name就输出空格 然后结束本次循环
            {
                printf(" ");
                continue;
            }
            else if(ch[i-1] == ' ' && (ch[i] >= 'A' && ch[i] <= 'Z' ))
            {   count++;//单词+1
                printf("%c",ch[i]);
                continue;
            }
            else if(ch[i-1] == ' ')//如果能到这里那就代表这个字符不是空格并且他前面的一个字符是空格
            {
                count++;//单词数+1
                ch[i] = ch[i] - 32;//小写改成大写
            }
            printf("%c",ch[i]);//打印字符
            }
            else
            {
                printf("%c",ch[i]);//如果不是字母或者空格就直接输出
            }
        }
        printf("\n");//打印换行
        printf("这句话一共有%d个单词\n",count);//打印单词数
    }
    return 0;
}

作者: 陆露    时间: 2015-9-15 12:11
最后一个判断是否为小写字母好像是多余的 能进入到这里 肯定不是大写字母和空格{:2_30:}
作者: llo    时间: 2015-9-15 21:57
  1. #include <stdio.h>
  2. #include <string.h>

  3. int main(int argc, const char * argv[]) {
  4.     // 输入字符串
  5.     printf("请输入一个字符串:\n");
  6.     char a[100];
  7.     gets(a);
  8.     // 记录单词的个数
  9.     int cout = 1;
  10.     // 把输入第一单词的字母变位大写
  11.     a[0] = a[0]-32;
  12.     // 用循环把数组中的每个元素都遍历一遍
  13.     for (int i = 0; i < 100; i++) {
  14.        // 判断当前字符是空格 且下一个字符是小写字母就把这个字符转换成大写 否则跳过这次循环
  15.          if(a[i+1]==' '){
  16.             

  17.              if (a[i+2]>='a' && a[i+2]<='z') {
  18.                  
  19.                  a[i+2] -= 32;
  20.                  cout++;
  21.                  
  22.              }else{
  23.                  
  24.                  continue;

  25.              }
  26.             
  27.         }

  28.         
  29.     }
  30.    
  31.     // 输出新的字符串 和 英文单词的个数
  32.     puts(a);
  33.     printf("%d",cout);

  34.    
  35.     return 0;
  36. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2