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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 剑气近 于 2014-6-18 23:31 编辑

题目是:输入一英文句子,将其中所有单词首字符转换成大写后输出。
#include "stdio.h"
int main()
{
    char str[100];
    int i=0;
    printf("请输入一个英文句子:\n");
    gets(str);
    if( (str[0]!=' ')&&(str[0]>96)  )
        str[0]=str[0]-32;
    for(i=1;str!='\0';i++)
        if(str[i-1]==' ')
            str=str-32;
    for(i=0;str!='\0';i++)
        printf("%c",str);
    printf("\n");
    return 0;
}
不知道程序哪里出了问题,有时候输出会有乱码,有时候转换出错,检查了好久也不知道哪里不对,求助!

7 个回复

倒序浏览
满足if( (str[0]!=' ')&&(str[0]>96)  )这个条件的不一定都是a~z
回复 使用道具 举报
不懂c语言
回复 使用道具 举报
王海江1 发表于 2014-6-16 23:45
满足if( (str[0]!=' ')&&(str[0]>96)  )这个条件的不一定都是a~z

假设只是输入字母呢  还是有问题啊
回复 使用道具 举报
for(i=1;str[i]!='\0';i++)
        if(str[i-1]==' ')
            str[i]=str[i]-32;

这里做空格判断时,如果是连续两个空格的话,那你第二个转换就是错误的。
回复 使用道具 举报
以下是我的方法,你可以参考一下。
  1. #include <stdio.h>
  2. #include <string.h>

  3. void wordToWORD(char *str,unsigned long num)                  //定义一个单词首字母转换函数,参数1为字符串,参数2为字符串长度
  4. {
  5.    
  6.     for(int i=0;i<=num;i++)                         //从字符串的第一个字符开始 遍历字符串
  7.     {
  8.         if(str[i]=='\0')                            //判断是否遍历到字符串末尾,是则退出
  9.             return;
  10.         if(i==0 && (str[i]>='a' && str[i]<='z'))    //判断字符串首字符是否为小写字母,是则转换成大写字母
  11.         {
  12.             str[i]=str[i]-32;                       //小写字母转换成大写字母
  13.             continue;                               //转换字符串首字母后结束本轮循环
  14.         }
  15.         
  16.         if( (str[i]>='a' && str[i]<='z') &&                 //判断当前遍历字符是否为小写字母以及该字符的前一字符是否是大写字母或者小写字母
  17.                 !((str[i-1]>='A' && str[i-1]<='Z') ||       //如果当前字符是小写字母且前一字符不是大小写字母,则进行大小写转换
  18.                        (str[i-1]>='a' && str[i-1]<='z')))   //这样做的好处是能将数字、空格及特殊符号后面的单词首字母也换成大写字母
  19.             str[i]=str[i]-32;                       //小写字母转换成大写字母
  20.         
  21.     }
  22.    
  23.     return ;
  24. }

  25. int main()
  26. {
  27.     char str[100]="";                     //开辟一个能接收100个字符的字符串空间

  28.     printf("请输入英文语句:\n");           //提示输入英文句子
  29.     gets(str);                           //获取键盘输入,并将获得的字符串赋值给str
  30.    
  31.     wordToWORD(str,strlen(str));         //调用首字母转换函数,传入参数字符串及字符串长度
  32.     printf("转换后输入语句:\n");           //提示输出大小写转换后的语句
  33.     printf("%s\n",str);                  //输出大小写转换后的语句
  34.    
  35.     return 0;
  36. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
傘が咲く + 1

查看全部评分

回复 使用道具 举报
邱蚓 中级黑马 2014-6-18 08:36:34
7#
诸葛佰通 发表于 2014-6-18 00:00
以下是我的方法,你可以参考一下。

哇,谢谢啦
回复 使用道具 举报
诸葛佰通 发表于 2014-6-18 00:00
以下是我的方法,你可以参考一下。

谢谢你啦,参考了你的代码,发现自己的程序逻辑还是不够严谨,已经修改好了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马