问题描述
- C++编程小白求教,逆序输出字符串
-
#include
#include
#include
#include
//逆序输出字符串
using namespace std;void print(const char a[],int size){
int i;
for(i=size;i>0;i--)
cout<<a[i-1];
cout<<endl;
}
void main(){int i=0; char a[50]; while(getchar()!='n'){ a[i] = getchar(); i++; } print(a,sizeof(a)); while(1);
}
请问大神们,上面的代码错在哪里啊?
解决方案
#include <iostream>
#include <string.h>
//逆序输出字符串
using namespace std;
void print(const char a[],int size)
{
int i;
for(i=size-1;i>=0;i--)
cout<<a[i];
cout<<endl;
}
int main()
{
int i=0;
char a[50];
cin>>a;
print(a,strlen(a));
return 0;
}
建议你这样,你用sizeof一般情况下是错的,按照你的定义sizeof(a)的值不管你输入多少数据都是50,strlen是检测字符串长度的,没有必要这么复杂得到字符串,一个cin就可以搞定。
再给你点建议,代码规范性,该空格的要空出来,不管自己还是别人看着都舒服。main函数类型尽量是int,并且给定返回值,现在新的编译器都不支持void类型的main函数,是会报错的。
解决方案二:
#include <stdio.h>
void foo()
{
char c = getchar();
if (c == 'n')
return;
foo();
printf("%c", c);
}
int main()
{
foo();
printf("n");
return 0;
}
解决方案三:
for(i=size-1;i>=0;i--)
解决方案四:
while循环判定中的getchar()会将第一个字符弹出,所以你无法记录到第一个字符串,而且sizeof(a),你不能用这个得出有效字符串长度,你只会得出这个数组长度
修改后:
do{
a[i] = getchar();
i++;
}while(a[i-1]!='n');
print(a,i-1);
解决方案五:
#include
#include
//逆序输出字符串
using namespace std;
void print(const char a[],int size)
{
int i;
for(i=size-1;i>=0;i--)
cout<cout
}
void main()
{
int i=0;
char a[50];
cin>>a;
print(a,strlen(a));
}
建议你这样,你用sizeof一般情况下是错的,按照你的定义sizeof(a)的值不管你输入多少数据都是50,strlen是检测字符串长度的,没有必要这么复杂得到字符串,一个cin就可以搞定。
再给你点建议,代码规范性,该空格的要空出来,不管自己还是别人看着都舒服。main函数类型尽量是int,并且给定返回值,现在新的编译器都不支持void类型的main函数,是会报错的。!图片说明
解决方案六:
数组的大小可以使i-1,不能够用sizeof。sizeof是整个数据的大小,不是数组实际存储内容的大小
解决方案七:
错在print(a,sizeof(a));
改成print(a,i);就好
解决方案八:
printf( strrev(str) ); //简单明了!!