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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Morning_jcg 中级黑马   /  2015-11-6 15:50  /  2021 人查看  /  21 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文



/*********************************************************************************


以下为本人的基础测试题,所表答案为我的答案,分析也是自己的理解,如有不对,还望指正。


**********************************************************************************/
编程题4:
输入一英文句子,将其中所有单词首字符转换成大写后输出。
我的源码:


  1. #include <stdio.h>
  2. #include <string.h>
  3. #define MAX 1000

  4. int main(){
  5.         char a[MAX];
  6.         int i, len, flag = 0;
  7.         gets(a);
  8.         len = strlen(a);
  9.         for ( i = 0; i < len; i++){
  10.                 if ( flag == 0 && a[i] <= 'z' && a[i] >= 'a'){
  11.                         a[i] -= 32;
  12.                         flag = 1;
  13.                 }
  14.                 if ( a[i] == ' ' || a[i] == ',' || a[i] == '.' ){
  15.                         flag = 0;
  16.                 }
  17.                 printf("%c",a[i]);
  18.         }
  19.         return 0;
  20. }
复制代码
嗯,这比前两题强多了。我的想法是这样的,首先我要把句子分割成多个单词,而单词与单词直接的分割无非是空格,逗号和句号。于是我设置了一个flag,默认为0.然后开始遍历这字符串数组。当一个新的单词开始是这个flag应该是0,然后此时读到的字母是首字母,所以我把它大写(asc码-32),同时设置flag为1.意思是这个单词的首字母我已经大写了,下面如果没进入一个新的单词的话我就不干活了。然后当读到空格逗号和句号的时候,我明白了,上一个单词结束了,如果之后再读到字母,那应该是下个单词的首字母了,又要大写了,所以要把flag重新置零,以此循环。遍历结束也就处理结束了。我还是一遍遍历一边输出的,因为不想写第二个循环,因为懒。


21 个回复

倒序浏览
占个沙发
回复 使用道具 举报
对的,说得明白
回复 使用道具 举报
写的好清楚了
回复 使用道具 举报
谁在放荡 来自手机 中级黑马 2015-11-6 21:18:46
报纸
顶一个,学习下
回复 使用道具 举报
大神,求赐教赐教呀
回复 使用道具 举报
大神,求赐教赐教呀,刚学C还不会
回复 使用道具 举报
陌忆 中级黑马 2015-11-6 22:37:52
8#
直接遍历整个数组就好了,你都把小写的改成大写的了
回复 使用道具 举报
陌忆 发表于 2015-11-6 22:37
直接遍历整个数组就好了,你都把小写的改成大写的了

只有首字母,不信你试试。
回复 使用道具 举报
jeffdy66 发表于 2015-11-6 22:14
大神,求赐教赐教呀

啊?我不是大神啊,,我就会一点c而已,,你要问什么==
回复 使用道具 举报
这是我的代码 希望跟楼主一起参考参考
  1. /*输入一个英文句子,将其中所有单词首字符装换成大写后输出*/
  2. #include<stdio.h>
  3. #include<string.h>
  4. #include<ctype.h>
  5. int main()
  6. {
  7.         char s[1024];
  8.         size_t lenth, i = 0;
  9.         fgets(s, 1024, stdin);
  10.         lenth = strlen(s);
  11.         s[0] = toupper(s[0]);
  12.         while (i++ < lenth)
  13.         {
  14.                 if (isspace(s[i]))
  15.                 {
  16.                         i++;
  17.                         s[i] = toupper(s[i]);
  18.                 }
  19.         }
  20.         printf("%s", s);
  21.         return 0;
  22. }
复制代码
回复 使用道具 举报
poxiao 发表于 2015-11-7 11:55
这是我的代码 希望跟楼主一起参考参考


<ctype.h>是啥啊,,好多函数没见过,不知道干嘛的。。
回复 使用道具 举报
额、、、ctype.h是一个C语言标准库,代码里面的toupper还有isspace都是这个标准库里面的,第一个是将字符转换为大写,第二个是判断是不是空格符
回复 使用道具 举报
poxiao 发表于 2015-11-8 20:04
额、、、ctype.h是一个C语言标准库,代码里面的toupper还有isspace都是这个标准库里面的,第一个是将字符转 ...

哦!这么好用!学习了,,
回复 使用道具 举报
学到很多,赞一个!
回复 使用道具 举报
不错,但是我认为不太简洁。应该有更好的ngfa
回复 使用道具 举报
简洁明了。。。
回复 使用道具 举报
楼主的C语言基本功很扎实
回复 使用道具 举报
好羡慕 我什么时候能有这么厉害 加油
回复 使用道具 举报
649685603 发表于 2015-11-9 16:59
好羡慕 我什么时候能有这么厉害 加油

额,,其实这一点都不厉害,,这种程度多做点练习就好了。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马