黑马程序员技术交流社区

标题: 输入一英文句子,将其中所有单词首字符转换成大写后输... [打印本页]

作者: Moebius    时间: 2014-7-6 17:41
标题: 输入一英文句子,将其中所有单词首字符转换成大写后输...
本帖最后由 Moebius 于 2014-7-6 19:03 编辑

题目如上。
#include <stdio.h>
void main()
{
        char *c;
        int i;
        printf("请输入英语句子\n");
        scanf("%s",c);
        x[0]=x[0]-32;
        for (i=1;c!='\0';i++)
                {  if (c[i-1]==' ')  
                        {  
                                                          c=c-32;
                        }
                }
        for (i=0;c!='\0';i++)
        {  
                printf("%c",c);
        }
        printf("\n");
        return 0;
}
代码如上,为什么编译没问题,可是它只是把第一个字母变大写,后面空格后的字母都不写了呢?

作者: Moebius    时间: 2014-7-6 19:05
自己查出来问题了。。 scanf( "%[^\n]", c); 表示可以存放除了 \n 外的其他所有字符。
作者: 龙泉长空    时间: 2014-7-6 19:13
好像有个函数可以直接这么办吧?
作者: 爱情路13号    时间: 2014-7-6 23:59
自己的错误自己最难发现了
作者: ★Joean_Zhou    时间: 2014-7-7 09:50
/*
输入一英文句子,将其中一切单词首字符转换成大写后输出。
*/

#include <stdio.h>

int main(int argc, const char * argv[])
{
    printf("请输入一段英文:\n");
   
    char a[100];  //定义一个数组接收字符串
   
    char *p = a;  //定义一指针指向数组首元素
   
    gets(a);  //输入一句英文
   
     *p -= 32;  //将第一个单词变为大写
   
    while(*p != '\0')  //循环直到遇到\0
    {
        
        if(*p != ' ')  //如果不为空格就继续判断
        {
            p++;
        }
        else if(*p == ' ')  //如果检测到了空格就使下一个字母变为大写
        {
            p++;
            
            *p -= 32;
        }
    }
   
    puts(a);  //输出a
   
    return 0;
}
好像用gets和put可以,我用scanf也会出现这个问题。。。。。不过用来gets好像有个警告,说不安全
作者: Devchen    时间: 2014-7-7 10:46
如果第一个单词如果是大写,岂不会出问题,应该先判断下。
作者: 冷水泡脚    时间: 2014-9-24 09:08
★Joean_Zhou 发表于 2014-7-7 09:50
/*
输入一英文句子,将其中一切单词首字符转换成大写后输出。
*/

不用指针能写吗?
作者: ★Joean_Zhou    时间: 2014-9-24 15:49
冷水泡脚 发表于 2014-9-24 09:08
不用指针能写吗?

能的,用数组也能实现的
作者: 菜鸟_琦    时间: 2014-10-16 21:48
  1. #include <stdio.h>

  2. int main(int argc, const char * argv[])
  3. {
  4.     printf("请输入一段英文:\n");
  5.    
  6.     char a[100];  //定义一个数组接收字符串
  7.    
  8.     char *p = a;  //定义一指针指向数组首元素
  9.    
  10.     gets(a);  //输入一句英文

  11.         if(*p != ' '&& *p >='a' && *p <='z' )  //如果不为空格且是小写
  12.         {
  13.                         *p -= 32;
  14.             p++;
  15.         }
  16.                 else if(*p != ' '&& *p >='A' && *p <='Z') // 如果不为空格且是大写
  17.                 {
  18.                         p++;
  19.                 }
  20.         else if(*p == ' ')  // 如果为空格
  21.         {
  22.             p++;
  23.         }   
  24.     while(*p != '\0')  //循环直到遇到\0
  25.     {
  26.         
  27.       if(*p != ' ')  //如果不为空格就继续判断
  28.         {
  29.             p++;
  30.         }
  31.         else if(*p == ' ')  //如果检测到了空格就使下一个字母变为大写
  32.         {
  33.             p++;
  34.             if(*p >='a' && *p <='z' )
  35.                 *p -= 32;
  36.         }
  37.     }
  38.    
  39.     puts(a);  //输出a
  40.    
  41.     return 0;
  42. }
复制代码

作者: 邵起    时间: 2014-12-9 20:20
Moebius 发表于 2014-7-6 19:05
自己查出来问题了。。 scanf( "%[^\n]", c); 表示可以存放除了 \n 外的其他所有字符。 ...

楼主能不能说的详细些,我也遇到这个问题了

作者: 从今以后    时间: 2014-12-12 17:24
邵起 发表于 2014-12-9 20:20
楼主能不能说的详细些,我也遇到这个问题了

网上看到说这叫正则表达式 一堆用法 没细看 比如%[0-9]就是录入这几个数字 ^表示取反集 %[^\n]就表示了除了\n字符 一概全收 大概是这意思。。
作者: 邵起    时间: 2014-12-12 18:40
从今以后 发表于 2014-12-12 17:24
网上看到说这叫正则表达式 一堆用法 没细看 比如%[0-9]就是录入这几个数字 ^表示取反集 %[^\n]就表示了除 ...

了解了,三克油!
作者: wxy19891017    时间: 2015-4-21 17:25
★Joean_Zhou 发表于 2014-7-7 09:50
/*
输入一英文句子,将其中一切单词首字符转换成大写后输出。
*/

你这个单词的首字母如果是大写的话,就出现问题了
作者: shao    时间: 2015-5-26 22:47
求助啊。。。。我也遇见同样的问题了额,scanf( "%[^\n]", c)这个是什么东西啊?  scanf("%s",c)不能接收空格额。。后面的 总是打印不出来
作者: yumei9    时间: 2015-8-16 19:47
shao 发表于 2015-5-26 22:47
求助啊。。。。我也遇见同样的问题了额,scanf( "%[^\n]", c)这个是什么东西啊?  scanf("%s",c)不能接收空 ...

scanf( "%[^\n]" 遇到回车结束
作者: tr2e    时间: 2015-8-22 11:13
菜鸟_琦 发表于 2014-10-16 21:48

受教了 很感谢。
作者: 米阳    时间: 2016-2-25 22:54
多谢了              




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2