A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

编辑一个程序,要求输入一个英文名字,把每个单词的首字母变成大写,想半天了也没写出来,求大神指点

7 个回复

倒序浏览
  1. #include <stdio.h>
  2. //---------------------------------------------------------------------------

  3. int main()
  4. {
  5.     char str[100];
  6.     char *ch = str;


  7.     printf("请输入一个英文句子:");
  8.     gets(str);            //输入一个句子(字符串)
  9.     if(*ch > 'a' && *ch < 'z') *ch -= 32;            //第一个字符转换成大
  10.     *ch++;                //指针往后移一位
  11.     while(*ch != '\0')    //循环条件: 到句尾退出循环
  12.     {
  13.         if(*ch != ' ')    //判断不为空格
  14.         {
  15.             ch++;         //指针后移一位
  16.         }
  17.         else
  18.         {
  19.             ch++;          //判断为空格,指针后移一位
  20.             if(*ch > 'a' && *ch < 'z') *ch -= 32;      //将后一位字符转换成大写
  21.         }
  22.        ch++;               //指针后移一位,直到句尾 '\0'退出循环
  23.     }
  24.     puts(str);             //输出句子(字符串)
  25.     return 0;
  26. }
复制代码


我的基础测试题, 你可以参考下.
回复 使用道具 举报
Fench 发表于 2015-4-7 11:05
我的基础测试题, 你可以参考下.

我试了一下,你这个也不对 啊,你自己试过了吗?
回复 使用道具 举报
Fench 发表于 2015-4-7 11:05
我的基础测试题, 你可以参考下.

这个代码是怎么复制的?我只会粘贴复制下来。
回复 使用道具 举报
感觉大家基础测试题都差不多
回复 使用道具 举报
  1. #include <stdio.h>

  2. int main()
  3. {
  4.     // 1.定义一个字符串变量,用来存储用户输入的语句
  5.     char str[100];
  6.    
  7.     // 2.提示用户输入语句
  8.     printf("请输入一个英文句子:\n");
  9.    
  10.     // 3.获取用户输入的语句
  11.     gets(str);
  12.    
  13.     // 4.判断用户输入的语句是否包括非英文字母或者非空格
  14.     for (int i = 0;  str[i] != '\0'; i++)
  15.     {
  16.         if ((str[i] >= 'A' && str[i] <= 'Z') ||
  17.             (str[i] >= 'a' && str[i] <= 'z') ||
  18.             str[i] == ' ')
  19.         {
  20.             
  21.         }
  22.         else
  23.         {
  24.             // 5.如果用户输入的既不是大写字母也不是小写字母,则重新输入
  25.             printf("输入的语句含非字母字符,请重新输入\n");
  26.             gets(str);
  27.         }
  28.     }
  29.    
  30.     // 6.判断首字母是否为小写,如果为小写则转为大写(因首字母前无空格,所以需要单独判断)
  31.     if (str[0] >= 'a' && str[0] <= 'z')
  32.     {
  33.         str[0] = str[0] - 32;
  34.     }
  35.    
  36.     // 7.遍历除首字符以外,字符串所有的字符
  37.     for (int j=1; str[j] != '\0'; j++)
  38.     {
  39.         // 8.如果字符为空格且下一个字符为小写字母,则把下一个字符转成大写字母
  40.         if (str[j] == ' ' && str[j+1] >= 'a' && str[j+1] <= 'z')
  41.         {
  42.             str[j+1] = str[j+1] - 32;
  43.         }
  44.     }

  45.     // 9.输出首字母被转成大写字母的英文句子
  46.     printf("%s\n", str);
  47.    
  48.     return 0;
  49. }
复制代码

回复 使用道具 举报
鹏jiqing 来自手机 中级黑马 2015-4-8 00:12:06
7#
基础题,没做
回复 使用道具 举报
chenzuliang1993 发表于 2015-4-7 23:17
我试了一下,你这个也不对 啊,你自己试过了吗?

sorry 我刚看了一下  多移动了一次ch 你将最后一个ch++;(line: 25) 去掉 应该就OK了. 感谢指出
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马