我刚开始使用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);
}
有人可以告诉我。
答案 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;
}