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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© CrazyMan 中级黑马   /  2014-12-3 22:08  /  746 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

问题是如果句子里面的单子如果有首字母本身是大写的,会转换成*呢??
//输入一英文句子,将其中所有单词首字符转换成大写后输出.
#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, 下载次数: 11)

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

3 个回复

倒序浏览
  1. else if(*p ==' ')//如果是了空格,就使空格后面的单词首字母变为大写
  2.         {
  3.             p++ ;
  4.             *p -=('a'-'A');
  5.         }
复制代码

J本来就是大写,走到这里 J(74) - 32 正好是*(42)
回复 使用道具 举报
从今以后 发表于 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.         }
复制代码

加个判断小写试试
回复 使用道具 举报

对,非常感谢瞬间恍然大悟,我之前在这块也加了小判断,不过我判断是是否为大写,
if(*p >=‘A’ &&*p <=‘Z’)
{
p++;
}
结果使本身大写字母后面的字母也变成大写了,:)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马