#include<iostream>
//#include<stdio.h>
using namespace std;
int main()
{
char mystr[20],rev[20];
int i,c=0;
cout<<"Enter a String: ";
gets(mystr);
for (i=0;mystr[i]!='\0';i++);
for (int j=i;j>=0;j--)
{
rev[c]=mystr[j];
c++;
}
cout<<"Reverse is: ";
puts(rev);
return 0;
}
为什么put()不打印任何内容? 如果我使用 for loop 打印字符串 rev 输出是正确的,但为什么 puts 没有给出正确的输出?
答案 0 :(得分:4)
因为在您的反向操作之后rev
的第一个符号是\0
,并且puts
认为字符串是以空值终止的。因此,它看到第一个字节为空并立即停止。
您可以通过以下方式修改循环:
for (i = 0; mystr[i] != '\0'; i++);
rev[i] = '\0';
for (int j = i-1; j>=0; j--)
{
rev[c] = mystr[j];
c++;
}
答案 1 :(得分:0)
一个问题是rev
数组是本地的,并且没有初始化;这意味着不保证结果字符串具有所需的终止\0
。
您可以在调用rev[c]='\0'
之前修复添加puts
的内容。
此外,您需要从输入字符串中的{{1>}之前的字符开始,否则输出将以\0
和'\0'
函数开头会停在那儿。
答案 2 :(得分:0)
puts()将\ 0(null)终止的字符串写入标准输出(stdout)并附加换行符('\ n')。由于rev在第0位有\ 0 char,puts()不打印任何内容。
您可以使用下面的代码来反转char数组。
int lenth = strlen(mystr);
int pos = lenth-1; // one posation before \0 char
int i = 0
for (; i <= pos; i++)
{
rev[i] = mystr[pos-i];
}
rev[i] = '\0';
或
int lenth = strlen(mystr);
int start = 0;
int end = lenth-1; // one posation before \0 char
for (; start < end; start++, end--)
{
char t;
t = mystr[start];
mystr[start] = mystr[end];
mystr[end] = t;
}
希望它有所帮助!