ruiqi_101
2015-04-17 11:16
采纳率: 50%
浏览 4.6k

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);

}

请问大神们,上面的代码错在哪里啊?

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

8条回答 默认 最新

  • 鸿羽_HongYu 2015-04-18 02:34
    已采纳
     #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函数,是会报错的。
    图片说明
    图片说明

    打赏 评论
  • bdmh 2015-04-17 11:26

    for(i=size-1;i>=0;i--)

    打赏 评论
  • redol9 2015-04-17 11:35

    while循环判定中的getchar()会将第一个字符弹出,所以你无法记录到第一个字符串,而且sizeof(a),你不能用这个得出有效字符串长度,你只会得出这个数组长度
    修改后:
    do{
    a[i] = getchar();
    i++;
    }while(a[i-1]!='\n');

    print(a,i-1);

    打赏 评论
  • devmiao 2015-04-17 13:15
    #include <stdio.h>
    
     void foo()
    {
        char c = getchar();
        if (c == '\n')
            return;
        foo();
        printf("%c", c);
    }
    
    int main()
    {
        foo();
        printf("\n");
        return 0;
    }
    
    打赏 评论
  • jinghuashuiyue06 2015-04-18 03:40

    数组的大小可以使i-1,不能够用sizeof。sizeof是整个数据的大小,不是数组实际存储内容的大小

    打赏 评论
  • sepNINE 2015-04-18 05:56

    错在print(a,sizeof(a));
    改成print(a,i);就好

    打赏 评论
  • 繁华落尽梦一场- 2015-04-19 09:30

    printf( strrev(str) ); //简单明了!!

    打赏 评论

相关推荐 更多相似问题