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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

void main(){
    printf("请输入一段英文:\n");
    char a[100];  //定义一个数组接收字符串
    char *p = a;  //定义一指针指向数组首元素
    gets(a);  //输入一句英文
        if(*p != ' '&& *p >='a' && *p <='z' )  //如果不为空格且是小写
        {
           *p -= 32;
            p++;
        }
        else if(*p != ' '&& *p >='A' && *p <='Z') // 如果不为空格且是大写
         {
               p++;
         }
        else if(*p == ' ')  // 如果为空格
        {
            p++;
        }   
    while(*p != '\0')  //循环直到遇到\0
    {
      if(*p != ' ')  //如果不为空格就继续判断
        {
            p++;
        }
        else if(*p == ' ')  //如果检测到了空格就使下一个字母变为大写
        {
            p++;
            if(*p >='a' && *p <='z' )
                *p -= 32;
        }
    }   
    puts(a);  //输出a
}

15 个回复

倒序浏览
确定这是对的吗?怎么看着错啊。。
回复 使用道具 举报
丁铭检 发表于 2015-6-19 20:34
确定这是对的吗?怎么看着错啊。。

可以copy下来运行一把试试啊
回复 使用道具 举报
ITClody 发表于 2015-6-19 20:35
可以copy下来运行一把试试啊

这么有信心那正确率太高了。。
回复 使用道具 举报
本帖最后由 ITClody 于 2015-6-20 18:40 编辑
丁铭检 发表于 2015-6-19 23:14
这么有信心那正确率太高了。。

刚刚又学到一种简单的方法,拿来分享:
         思路:                           
                 ①输入
                 ②接收字符串并保存到数组中
                 ③循环取出每一个字符  遇到'\0'循环结束
                 ④判断是否为单词
                 ⑤当前循环的字符是空格,则下次循环一定是个单词
              代码实现:
                  void main(){
                        char str[1000];
                        int words=0;//这是一个标记,标记是否为空格
                        int count=0;//统计单词的个数
                        printf("请输入一个字符串:\n");
                        gets(str);
                        for(int i=0;str!='\0';i++){
                                if(str
==' '){
                                        words=0;//标记为0表示这是一个单词
                                }else if(words==0){
                                        count++;
                                        str
=str-32;//通过-32将其变成大写
                                        words=1;
                                }
                        }
                        //puts(str);
                        printf("字符串的个数是:%d,字符串:%s\n",count,str);
                  }
回复 使用道具 举报
本帖最后由 丁铭检 于 2015-6-20 18:20 编辑
ITClody 发表于 2015-6-19 23:24
刚刚又学到一种简单的方法,拿来分享:
         思路:                           
                 ①输入

这个不错哦,不过有个小细节错误,自己去发现吧。。。。不会像上面那么复杂、、
回复 使用道具 举报
goldboy 来自手机 中级黑马 2015-6-20 18:33:56
7#
  else if(*p != ' '&& *p >='A' && *p <='Z') // 如果不为空格且是大写
   {
   p++;
   }
  else if(*p == ' ')// 如果为空格
  {
   p++;
  }   
这两句可以合在一起吧,都是让p加1
回复 使用道具 举报
丁铭检 发表于 2015-6-20 18:18
这个不错哦,不过有个小细节错误,自己去发现吧。。。。不会像上面那么复杂、、 ...

好眼神,写的时候太马虎了
回复 使用道具 举报
goldboy 发表于 2015-6-20 18:33
  else if(*p != ' '&& *p >='A' && *p

条件不同的
回复 使用道具 举报
goldboy 来自手机 中级黑马 2015-6-20 18:39:42
10#
搞不懂为什么不一开始就用while循环,而是要把第一字母扫过过后再用循环
回复 使用道具 举报
goldboy 发表于 2015-6-20 18:39
搞不懂为什么不一开始就用while循环,而是要把第一字母扫过过后再用循环

开始判断是转换为大写字母的
回复 使用道具 举报
goldboy 来自手机 中级黑马 2015-6-20 18:47:08
12#
楼主给的那个简单方法中最经典的是那个word,它相当于一个信号灯,当word为0时,表示前方要大写,当word为1时,表示刚刚改完大写。相信此时已经发现问题了,要是空格后就是大写的,再减的话就会变成其他东西了,所以要再加个判断,空格后是否是大写
回复 使用道具 举报
goldboy 发表于 2015-6-20 18:47
楼主给的那个简单方法中最经典的是那个word,它相当于一个信号灯,当word为0时,表示前方要大写,当word为1 ...

:handshake 嗯呢,感谢提醒。这个是需要注意的
回复 使用道具 举报
围观学习
回复 使用道具 举报
kalon 来自手机 中级黑马 2015-6-22 09:22:42
15#
学习一下,收藏了
回复 使用道具 举报
kalon 发表于 2015-6-22 09:22
学习一下,收藏了

相互学习,共同进步
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马