qawsed10203 发表于 2019-8-19 20:47:47

关于字符逆序的问题

本帖最后由 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;
    int i;
   scanf("%[^\n]", a);//接收
    int len = strlen(a);//字符串长度
    i=len-1;
    while(len >= 0){//输出
      printf("%c", a);
      i--;
    }
    return 0;
}

qawsed10203 发表于 2019-8-19 20:48:33

请问这样为什么会有一堆乱码呀。。{:10_266:}{:10_266:}

jackz007 发表于 2019-8-19 21:03:08

本帖最后由 jackz007 于 2019-8-19 21:06 编辑

      [^\n] 是什么东东?

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

      fgets(a , 100 , stdin)   ;
      a = '\0'; /* 去掉字符串末尾的 '\n' */

bin554385863 发表于 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);//或者 a = getchar();
}

qawsed10203 发表于 2019-8-19 23:14:48

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

jackz007 发表于 2019-8-19 21:03
[^\n] 是什么东东?

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

这个可以接收除了\n外所有的东西fgets()可以我想知道scanf为什么不行。。谢谢大佬

qawsed10203 发表于 2019-8-19 23:19:02

还有请问这个for和while的效果不是一样的吗。。为什么提交第二个会答案错误啊。。


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



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

qawsed10203 发表于 2019-8-19 23:23:33

bin554385863 发表于 2019-8-19 21:06
a是一个数组,
要用scanf()初始化数组,应该用循环,否则用gets()或者getchar()+循环

[^\n]可以接受除\n外的所有东西   我就是不明白为什么会有乱码。。

bin554385863 发表于 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')}

flamer 发表于 2019-8-20 09:30:13

a要初始化,不然strlen得出来的数不一定是多少
另外while(len >= 0) 会死循环吧len没有--操作

qawsed10203 发表于 2019-8-21 00:07:13

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

好的,谢谢

qawsed10203 发表于 2019-8-21 00:08:34

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

{:5_104:}对的,谢谢
页: [1]
查看完整版本: 关于字符逆序的问题