我是C ++的新手,来自Java和Python背景。
最后,对于我需要编写的程序,我需要反转字符串中单词的顺序。即“做或不做没有尝试”成为“尝试没有没有做或做”
但是现在,我只是想将单个单词放在数组/向量中。
#include <iostream>
#include <vector>
using namespace std;
int main()
{
string x = "There is no knowledge that is not power";
vector<string> myvector;
string str = "";
char spaceman = ' ';
for( int a = 0; a < x.length(); a++)
{
if(x[a].compare(spaceman) != 0)
{
str.append(x[a]);
}
else
{
myvector.push_back(str);
str = "";
}
}
cout << myvector.at(0) << endl;
cout << x[0] << endl; //A test on x
return 0;
}
然而,这会返回以下警告和错误消息(顺便说一下,我使用的是CodeLite):
warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for( int a = 0; a < x.length(); a++)
^
error: request for member 'compare' in 'x.std::basic_string<_CharT, _Traits, _Alloc>::operator[]<char, std::char_traits<char>, std::allocator<char> >(((std::basic_string<char>::size_type)a))', which is of non-class type 'char'
if(x[a].compare(spaceman) != 0)
^
error: invalid conversion from 'char' to 'const char*' [-fpermissive]
str.append(x[a]);
^
我错过了什么?我对C ++非常不熟悉。将“spaceman”变量从char更改为string也没有做任何事情。
答案 0 :(得分:2)
简单地比较喜欢与之类似:
if(x[a] == spaceman)
{
// ...
因为x[a]
与char
一样spaceman
。
答案 1 :(得分:2)
首先,您可以更简单地构建矢量。例如
#include <iostream>
#include <vector>
#include <sstream>
#include <iterator>
int main()
{
std::string s = "There is no knowledge that is not power";
std::istringstream is( s );
std::vector<std::string> myvector( ( std::istream_iterator<std::string>( is ) ),
std::istream_iterator<std::string>() );
for ( std::string t : myvector ) std::cout << t << std::endl;
}
至于你的代码,然后在这个for语句
for( int a = 0; a < x.length(); a++)
将有符号整数a与无符号x.length()进行比较。编写
是正确的for( std::string::size_type a = 0; a < x.length(); a++)
在本声明中
if(x[a].compare(spaceman) != 0)
表达式x [a]具有char类型。包括char在内的基本类型不是类,也没有方法。
并且std :: string类中没有append方法,它有一个char类型的参数。 而不是
str.append(x[a]);
应该有
str.append(1, x[a]);