黑马程序员技术交流社区

标题: 求助大神解决,看看我的程序那块不对 [打印本页]

作者: CrazyMan    时间: 2014-12-3 22:08
标题: 求助大神解决,看看我的程序那块不对
问题是如果句子里面的单子如果有首字母本身是大写的,会转换成*呢??
//输入一英文句子,将其中所有单词首字符转换成大写后输出.
#include <stdio.h>
int main()
{
   
    printf(" 请输入一段英文句子:\n");
   
    char a[100];//定义一个数组接受字符串
   
    char *p=a ;//定义一个指针指向数组a中的第一个元素
   
    //保存用户输入的英文句子
    scanf("%[^\n]",a );//可以存放除了\n外的其他所有字符
   
    if(*p >='a' && *p <='z' )  //如果是小写就转换成大写
    {
        *p -= 32;
        p++;
    }
    else if( *p >='A' && *p <='Z') // 如果大写就不转换
    {
        p++;
    }
   
    while (*p!='\0')//循环直到遇到\0
    {
        if (*p !=' ')//如果不为空格,就继续进行判断
        {
            p++;
        }
      
        else if(*p ==' ')//如果是了空格,就使空格后面的单词首字母变为大写
        {
            p++ ;
            *p -=('a'-'A');
        }
    }
    //打印转换后的a
    printf("%s\n",a );
   
    return 0;
}

屏幕快照 2014-12-03 上午6.10.23.png (10.11 KB, 下载次数: 6)

屏幕快照 2014-12-03 上午6.10.23.png

作者: 从今以后    时间: 2014-12-3 22:23
  1. else if(*p ==' ')//如果是了空格,就使空格后面的单词首字母变为大写
  2.         {
  3.             p++ ;
  4.             *p -=('a'-'A');
  5.         }
复制代码

J本来就是大写,走到这里 J(74) - 32 正好是*(42)
作者: 从今以后    时间: 2014-12-3 22:26
从今以后 发表于 2014-12-3 22:23
J本来就是大写,走到这里 J(74) - 32 正好是*(42)
  1. else if(*p ==' ')//如果是了空格,就使空格后面的单词首字母变为大写
  2.         {
  3.             p++ ;
  4.             if(*p >='a' && *p <='z' )
  5.             *p -=('a'-'A');
  6.         }
复制代码

加个判断小写试试
作者: CrazyMan    时间: 2014-12-4 00:09
从今以后 发表于 2014-12-3 22:26
加个判断小写试试

对,非常感谢瞬间恍然大悟,我之前在这块也加了小判断,不过我判断是是否为大写,
if(*p >=‘A’ &&*p <=‘Z’)
{
p++;
}
结果使本身大写字母后面的字母也变成大写了,:)





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