鱼C论坛

 找回密码
 立即注册
查看: 1594|回复: 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

#include<stdio.h>
#include <string.h>
int main()
{
    char a[100];
    int i;
   scanf("%[^\n]", a);//接收
    int len = strlen(a);//字符串长度
    i=len-1;
    while(len >= 0){//输出
        printf("%c", a[i]);
        i--;
    }
    return 0;
}
最佳答案
2019-8-20 09:30:13
a要初始化,不然strlen得出来的数不一定是多少
另外while(len >= 0) 会死循环吧  len没有--操作
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-8-19 20:48:33 | 显示全部楼层
请问这样为什么会有一堆乱码呀。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

      [^\n] 是什么东东?

      输入带空格的字符串,用 fgets() 函数不可以吗?
        fgets(a , 100 , stdin)   ;
        a[strlen(a) - 1] = '\0'  ; /* 去掉字符串末尾的 '\n' */
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


a是一个数组,
要用scanf()初始化数组,应该用循环,否则用gets()或者getchar()+循环
for (size_t i = 0; i < 100; i++)
{
    scanf("%c", &a[i]);//或者 a[i] = getchar();
}
想知道小甲鱼最近在做啥?请访问 -> 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为什么不行。。  谢谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

#include<stdio.h>
#include <string.h>
int main()
{
    char a[100];
    int i;
   scanf("%[^\n]", a);
    int len = strlen(a);
    for(int i=len-1; i>=0; i--){
        printf("%c", a[i]);
    }
    return 0;
}
[code]


#include<stdio.h>
#include <string.h>
int main()
{
    char a[100];
    int i;
   scanf("%[^\n]", a);
    int len = strlen(a);
    while(len >= 0){
        printf("%c", a[len-1]);
        len--;
    }
    return 0;
}
[/code]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

[^\n]可以接受除\n外的所有东西   我就是不明白为什么会有乱码。。
想知道小甲鱼最近在做啥?请访问 -> 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')}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

好的,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

对的,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-4 05:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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