在c ++中比较字符与空格?

时间:2014-09-14 17:44:22

标签: c++ arrays vector char

我是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也没有做任何事情。

2 个答案:

答案 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]);