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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 wxy19891017 于 2015-4-22 15:23 编辑

#import <Foundation/Foundation.h>

//定义一个函数,将小写字母转换成大写字母
char upper(char c);

int main()
{
    //存储用户输入的数据
    char str[100];
   
    //提示输入并接收
    printf("请输入一段英文句子:\n");
    //如果使用scanf不能完整接收带有空格的字符串
    gets(str);
   
    //定义一个指针指向数组首元素
    char *p = str;
   
    //判断首字母是不是大小写
    *p = upper(*p);
   
    //*p不遇到'\0'
    while (*p)
    {
        //没有遇到空格,继续
        if (*p !=' ')
        {
            p++;
        }
        //遇到空格,定位到下一个字符,字母小写改成大
        else
        {
            p++;
           *p = upper(*p);
            }
        }
    }
   
    printf("%s",str);
   
   
    return 0;
}

//转大写
char upper(char c)
{
    if (c >= 'a' && c <= 'z')
    {
        return c - 32;
    }
   
    return c;
}

其实网上看了好多,都没有考虑到第一个单词的首字母如果大写的情况。还有就是这里如果用scanf接收数据的话,带有空格的字符串,空格后的字符串都会丢失,所以用了gets。去除了下重复的代码。

点评

好问题  发表于 2015-4-23 17:07

31 个回复

正序浏览
wxy19891017 发表于 2015-4-23 08:58
我也是小白,知识看过了,好多题目一眼看上去没什么思路,百度下看下人家写的,大部分又能看懂。这可能就 ...

确实,而且基础要弄好
回复 使用道具 举报
ruihai 发表于 2015-4-23 16:52
scanf("%[^\n]")里面 ^表示非,所以这句意思是读取用户输入的所有非换行字符,当然也就包括空格啦 ...

恩。非常感谢,学习了!
回复 使用道具 举报
不错不错,楼主提的很好 用gets
回复 使用道具 举报
scanf("%[^\n]")里面 ^表示非,所以这句意思是读取用户输入的所有非换行字符,当然也就包括空格啦
回复 使用道具 举报
其实用scanf也是可以读取输入的空格哦, 试试 scanf("%[^\n]")
回复 使用道具 举报
麻木 发表于 2015-4-23 12:41
楼主 我觉得我写的比你写的略好,理由如下:
请指正

我还想知道下,就是这种代码怎么弄下来的?我只会粘贴复制下来!

点评

非常感谢  发表于 2015-4-23 21:42
懂你意思了 你发帖子的时候 要点一下上面有一个代码按钮 点了后 会弹出一个对话框 你就可以把代码贴进去 这样好看。  发表于 2015-4-23 17:22
啥叫怎么弄下来 在Xcode里面敲啊  发表于 2015-4-23 17:20
回复 使用道具 举报
麻木 发表于 2015-4-23 12:41
楼主 我觉得我写的比你写的略好,理由如下:
请指正

比我写的好的太多了,scanf函数如何接收空格这个我不知道,toupper函数也没见过!我的就像是白话文,你的就是高大上的文言文!学习了,非常感谢!刚刚学习C语言,好多好多方面都是要学习的,根据基础视频勉强能敲出点简单地代码!还是要继续学习的。非常感谢!
回复 使用道具 举报
楼主 我觉得我写的比你写的略好,理由如下:
请指正
  1. /**
  2. *7.输入一英文句子,将其中所有单词首字符转换成大写后输出。(C语言)
  3. */

  4. #include <stdio.h>

  5. int main(int argc, const char * argv[])
  6. {
  7.     //1.提示用户输入一个英文句子
  8.     printf("请输入一个英文句子,回车确定\n");
  9.    
  10.     //2.新建一个大小为100的字符串用于存储用户输入的英文句子
  11.     char sentence[100];
  12.    
  13.     //3.系统输入赋值给sentence字符串变量 这里scanf函数第一个参数为"%[^\n]",表示接受空格作为输入,不然默认空格是输入结束符
  14.     scanf( "%[^\n]", sentence);
  15.    
  16.     //4.新建length变量用于存贮字符串的长度
  17.     unsigned long length = strlen(sentence);
  18.    
  19.     //5.因为第一个字母通常就是第一个单词的首字母 所以直接变大写字母,就算是空格,使用toupper函数不变
  20.     sentence[0] = toupper(sentence[0]);
  21.    
  22.     //6.循环遍历字符串数组 如果遇到一个空格和空格后面是一个字符的情况 就调用toupper函数对空格后面的字符做大写处理
  23.     for(int i = 1;i < length-1;i++)
  24.     {
  25.         //6.1当前遍历元素是空格
  26.         if(0x20== sentence[i])
  27.         {
  28.             //6.2后面那个字符还是空格吗?
  29.             if(0x20 != sentence[i+1])
  30.             {
  31.                 //6.3是,则大写处理
  32.                 sentence[i+1] = toupper(sentence[i+1]);
  33.             }
  34.         }
  35.     }
  36.    
  37.     //7.输出转换好的英文句子给用户
  38.     printf("转换后的句子为\n");
  39.     printf("%s\n",sentence);
  40.    
  41.     return 0;
  42. }
复制代码
回复 使用道具 举报

太渣渣了,最简单的指针了,对于新手的我,慢慢学吧!
回复 使用道具 举报
代码很不错哦,加油
回复 使用道具 举报
ios专用 发表于 2015-4-22 22:56
不会做,我c语言部分还没看完

我也是小白,知识看过了,好多题目一眼看上去没什么思路,百度下看下人家写的,大部分又能看懂。这可能就是咱们这种刚开始接触编程都要遇到的,视频上,老师说编程的思想不是一天两天培养出来的,需要在开发中慢慢培养的。
回复 使用道具 举报
wxy19891017 发表于 2015-4-22 08:21
可以,不看完基本也能做出来,单单就是用到了指针和while循环。

:'(  不会做,我c语言部分还没看完
回复 使用道具 举报
楼主很棒!
回复 使用道具 举报
枫宇翔 发表于 2015-4-22 10:02
刚才看了一下你的代码,发现你的代码的功能重复了,upper里面的和main里面判断字母的代码是重复,这样不好 ...

恩,确实是。待改进,我也是新手,谢谢提了建议!
回复 使用道具 举报
向楼主学习
回复 使用道具 举报
不错啊! 一个字牛啊!
回复 使用道具 举报
不错啊! 一个字牛啊!
回复 使用道具 举报
刚才看了一下你的代码,发现你的代码的功能重复了,upper里面的和main里面判断字母的代码是重复,这样不好,太浪费看,你不觉得么
回复 使用道具 举报
wxy19891017 发表于 2015-4-22 08:20
其实就是C语言就足够了

好的,我加紧看完c语言,争取第八期的名额
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马