利用指针将字符串中的大写字母转换成相应的小写字母,同时将小写字母转换成大写字母,其余字符不变。例如:“Abc ** Def###”将被转换为 “aBC ** d

洲界多水 2019-05-16 04:14:49
里边有些字母没有转换是为什么
...全文
2427 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
洲界多水 2019-05-17
  • 打赏
  • 举报
回复
引用 7 楼 拥抱Linux的回复:
[quote=引用 5 楼 weixin_45072608 的回复:]
,就是那个花括号

真正的问题是多了一句 p++; , 但是直接按俺在2楼说的那样加花括号的话,会因为遇到了不是字母的字符而 p不++ 就进入了死循环。
俺当时忽略了存在非字母字符的情况,想到了单纯转换字母的问题。
所以,还是得把 p++; 放到 所有的 if 的外面,确保只要执行一次循环,就 p++ 一次才行。
~[/quote] 我发现了,已经改正了
自信男孩 2019-05-16
  • 打赏
  • 举报
回复
一个p++就好了,并且放到最后,循环的最后
拥抱Linux 2019-05-16
  • 打赏
  • 举报
回复
引用 5 楼 weixin_45072608 的回复:
,就是那个花括号

真正的问题是多了一句 p++; , 但是直接按俺在2楼说的那样加花括号的话,会因为遇到了不是字母的字符而 p不++ 就进入了死循环。
俺当时忽略了存在非字母字符的情况,想到了单纯转换字母的问题。
所以,还是得把 p++; 放到 所有的 if 的外面,确保只要执行一次循环,就 p++ 一次才行。
CaptainXue 2019-05-16
  • 打赏
  • 举报
回复
你这个while循环中怎么有两个p++呢?当是大写字母时,你转化为小写后,你就p++,会跳过大写字母后的字符,这样就有可能会漏掉该字符的转化。你的程序逻辑应该是对于每一个字符检测是否为大小写字母,如果是就转化,转化后移动到下一个字符。所以只保留最后的那个p++即可!可以看看有关逻辑的文章,https://blog.csdn.net/weixin_43956598/article/details/90049508
洲界多水 2019-05-16
  • 打赏
  • 举报
回复
引用 4 楼 拥抱Linux的回复:
[quote=引用 2 楼 拥抱Linux 的回复:]
每次循环, p++; 这句语句都执行了 2 次,所以 会 跳过一些字母。
建议养成把 代码块 用花括号 括起来的习惯, 即使只有一句语句 也 括起来,避免意外的错误。比如这里的:

if(){
*p += 32;
p++;
}

:-)

不好意思,说错了,忘了还有其它字符,想成全是字母去了。
应该是把循环体里面的两个 if 合并成 一对 if - else if ,然后 最后 保留 一个 p++ ; 就可以了。
~[/quote] ,就是那个花括号
拥抱Linux 2019-05-16
  • 打赏
  • 举报
回复
引用 2 楼 拥抱Linux 的回复:
每次循环, p++; 这句语句都执行了 2 次,所以 会 跳过一些字母。
建议养成把 代码块 用花括号 括起来的习惯, 即使只有一句语句 也 括起来,避免意外的错误。比如这里的:

if(){
*p += 32;
p++;
}

:-)

不好意思,说错了,忘了还有其它字符,想成全是字母去了。
应该是把循环体里面的两个 if 合并成 一对 if - else if ,然后 最后 保留 一个 p++ ; 就可以了。
WindyValley 2019-05-16
  • 打赏
  • 举报
回复
另外多一句,你可能是把python的缩进规则带到C++里面来了
拥抱Linux 2019-05-16
  • 打赏
  • 举报
回复
每次循环, p++; 这句语句都执行了 2 次,所以 会 跳过一些字母。
建议养成把 代码块 用花括号 括起来的习惯, 即使只有一句语句 也 括起来,避免意外的错误。比如这里的:

if(){
*p += 32;
p++;
}

:-)
WindyValley 2019-05-16
  • 打赏
  • 举报
回复
15行的p++是多余的,或者你在后面添一个continue也行

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧