鱼C论坛

 找回密码
 立即注册
查看: 2029|回复: 10

[已解决]关于字符逆序的问题

[复制链接]
发表于 2019-8-19 20:47:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 qawsed10203 于 2019-8-19 20:54 编辑

将一个字符串str的内容颠倒过来,并输出。str的长度不超过100个字符。
输入:
输入包括一行。 第一行输入的字符串。
输出:
输出转换好的逆序字符串。
样例输入
I am a student
样例输出
tneduts a ma I


  1. #include<stdio.h>
  2. #include <string.h>
  3. int main()
  4. {
  5.     char a[100];
  6.     int i;
  7.    scanf("%[^\n]", a);//接收
  8.     int len = strlen(a);//字符串长度
  9.     i=len-1;
  10.     while(len >= 0){//输出
  11.         printf("%c", a[i]);
  12.         i--;
  13.     }
  14.     return 0;
  15. }
复制代码
最佳答案
2019-8-20 09:30:13
a要初始化,不然strlen得出来的数不一定是多少
另外while(len >= 0) 会死循环吧  len没有--操作
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-8-19 20:48:33 | 显示全部楼层
请问这样为什么会有一堆乱码呀。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-19 21:03:08 | 显示全部楼层
本帖最后由 jackz007 于 2019-8-19 21:06 编辑

      [^\n] 是什么东东?

      输入带空格的字符串,用 fgets() 函数不可以吗?

  1.         fgets(a , 100 , stdin)   ;
  2.         a[strlen(a) - 1] = '\0'  ; /* 去掉字符串末尾的 '\n' */
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-19 21:06:30 | 显示全部楼层
本帖最后由 bin554385863 于 2019-8-20 01:16 编辑
qawsed10203 发表于 2019-8-19 20:48
请问这样为什么会有一堆乱码呀。。


a是一个数组,
要用scanf()初始化数组,应该用循环,否则用gets()或者getchar()+循环
  1. for (size_t i = 0; i < 100; i++)
  2. {
  3.     scanf("%c", &a[i]);//或者 a[i] = getchar();
  4. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-19 23:14:48 | 显示全部楼层
本帖最后由 qawsed10203 于 2019-8-19 23:20 编辑
jackz007 发表于 2019-8-19 21:03
[^\n] 是什么东东?

      输入带空格的字符串,用 fgets() 函数不可以吗?


这个可以接收除了\n外所有的东西  fgets()可以  我想知道scanf为什么不行。。  谢谢大佬
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-19 23:19:02 | 显示全部楼层
还有请问这个for和while的效果不是一样的吗。。为什么提交第二个会答案错误啊。。


  1. #include<stdio.h>
  2. #include <string.h>
  3. int main()
  4. {
  5.     char a[100];
  6.     int i;
  7.    scanf("%[^\n]", a);
  8.     int len = strlen(a);
  9.     for(int i=len-1; i>=0; i--){
  10.         printf("%c", a[i]);
  11.     }
  12.     return 0;
  13. }
  14. [code]


  15. #include<stdio.h>
  16. #include <string.h>
  17. int main()
  18. {
  19.     char a[100];
  20.     int i;
  21.    scanf("%[^\n]", a);
  22.     int len = strlen(a);
  23.     while(len >= 0){
  24.         printf("%c", a[len-1]);
  25.         len--;
  26.     }
  27.     return 0;
  28. }
复制代码
[/code]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-19 23:23:33 | 显示全部楼层
bin554385863 发表于 2019-8-19 21:06
a是一个数组,
要用scanf()初始化数组,应该用循环,否则用gets()或者getchar()+循环

[^\n]可以接受除\n外的所有东西   我就是不明白为什么会有乱码。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-20 00:55:54 | 显示全部楼层
本帖最后由 bin554385863 于 2019-8-20 01:04 编辑
qawsed10203 发表于 2019-8-19 23:23
[^\n]可以接受除\n外的所有东西   我就是不明白为什么会有乱码。。


读取字符串,不建议以用scanf(),除非你是一个一个字符的输入且忽略空白字符,否则建议你直接用gets()
而且,字符串最后一位是'\0',你看不到不代表他不存在,你反转字符串以后首位成了'\0',这并没有什么毛病,要命的是翻转的字符串尾部并没有结束符,所以才会出现乱码.
如下
原字符串:
{''hello"," world", "\0"}
翻转:
{"\0", "dlrow", "olleh",(此处没有结束符因此按照原长度输出字符串会输出一个随机值,这是造成乱码的罪魁祸首), XXXX, XXXXX,......(直到遇到一个随机值为'\0')}
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-20 09:30:13 | 显示全部楼层    本楼为最佳答案   
a要初始化,不然strlen得出来的数不一定是多少
另外while(len >= 0) 会死循环吧  len没有--操作
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-21 00:07:13 | 显示全部楼层
bin554385863 发表于 2019-8-20 00:55
读取字符串,不建议以用scanf(),除非你是一个一个字符的输入且忽略空白字符,否则建议你直接用gets()
而 ...

好的,谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-21 00:08:34 | 显示全部楼层
flamer 发表于 2019-8-20 09:30
a要初始化,不然strlen得出来的数不一定是多少
另外while(len >= 0) 会死循环吧  len没有--操作

对的,谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-1 21:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表