用c ++反转一个字符串

时间:2014-08-20 22:04:25

标签: c++ string algorithm reverse

我刚开始使用c ++进行编码。

我为反向字符串编写了一个代码。我得到空结果。

void main ()
{
    string str1="abcde";string rev="";
    int n=str1.size();
    for(int i=n-1;i>=0;i--)
    {
        rev += str1[i];
    }
printf("%s \n", rev);
}

有人可以告诉我。

2 个答案:

答案 0 :(得分:5)

正在使用std::string格式说明符打印

%s。尝试改变

printf("%s \n", rev);

printf("%s \n", rev.c_str());

或者@Appleshell建议,以C++样式:

制作
std::cout << rev << "\n";

<强> PS

显然,有一些现成的方法可以反转字符串,但我认为这个想法是完全实现的。

答案 1 :(得分:4)

首先,C ++和C中的函数main应具有返回类型int。所以它应该被定义为

int main()
{
   //...

其次,成员函数size()具有无符号整数返回类型。所以写

会更好
std::string::size_type n = str1.size();

第三,您应该在C ++程序中使用C ++流而不是C流。 C函数printf无法输出std :: string类型的对象。所以你必须传递一个指向成员函数c_str()

返回的字符数组的指针

循环可以按以下方式编写

std::string::size_type n = str1.size();

for ( std::string::size_type i = 0; i < n; i++ )
{
   rev[i] = str1[n - i - 1];
}

考虑到你可以让反转的字符串更简单。例如

std::string rev( str1.rbegin(), str1.rend() );

不使用任何循环。

所以程序看起来像

#include <iostream>
#include <string>

int main ()
{
    std::string str1 = "abcde";
    std:: string rev( str1.rbegin(), str1.rend() );

    std::cout << str1 << std::endl;
    std::cout << rev << std::endl;

    std::string::size_type n = rev.size();

    for ( std::string::size_type i = 0; i < n / 2; i++ )
    {
        // std::swap( rev[i], rev[n - i - 1] );
        char c = rev[i];
        rev[i] = rev[n - i - 1];
        rev[n - i - 1] = c;
    }

    std::cout << str1 << std::endl;
    std::cout << rev << std::endl;
}