关于字符逆序的问题
本帖最后由 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;
} 请问这样为什么会有一堆乱码呀。。{:10_266:}{:10_266:} 本帖最后由 jackz007 于 2019-8-19 21:06 编辑
[^\n] 是什么东东?
输入带空格的字符串,用 fgets() 函数不可以吗?
fgets(a , 100 , stdin) ;
a = '\0'; /* 去掉字符串末尾的 '\n' */ 本帖最后由 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:20 编辑
jackz007 发表于 2019-8-19 21:03
[^\n] 是什么东东?
输入带空格的字符串,用 fgets() 函数不可以吗?
这个可以接收除了\n外所有的东西fgets()可以我想知道scanf为什么不行。。谢谢大佬 还有请问这个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;
} bin554385863 发表于 2019-8-19 21:06
a是一个数组,
要用scanf()初始化数组,应该用循环,否则用gets()或者getchar()+循环
[^\n]可以接受除\n外的所有东西 我就是不明白为什么会有乱码。。 本帖最后由 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')} a要初始化,不然strlen得出来的数不一定是多少
另外while(len >= 0) 会死循环吧len没有--操作 bin554385863 发表于 2019-8-20 00:55
读取字符串,不建议以用scanf(),除非你是一个一个字符的输入且忽略空白字符,否则建议你直接用gets()
而 ...
好的,谢谢 flamer 发表于 2019-8-20 09:30
a要初始化,不然strlen得出来的数不一定是多少
另外while(len >= 0) 会死循环吧len没有--操作
{:5_104:}对的,谢谢
页:
[1]