0

我对 C++ 中的向量有点困惑;这是我第一次使用它们。我制作了一个字符串向量,并试图将该向量中的元素与一个字母进行比较。

#include <iostream>
#include <string>
#include <vector>
using namespace std;

/* Head ends here */
void displayPathtoPrincess(int n, vector <string> grid){
    for(vector<string>::iterator it = grid.begin(); it != grid.end(); ++it) {
        if(*it.strcompare('p') != 0)
            cout << 'Princess found!';
    }
}

/* Tail starts here */
int main() {

    int m;
    vector <string> grid;

    cin >> m;

    for(int i=0; i<m; i++) {
        string s; cin >> s;
        grid.push_back(s);
    }

    displayPathtoPrincess(m,grid);

    return 0;
}

为什么这行不通?*它不会总是字符串类型吗?

这是我的错误:

error: 'std::vector >::iterator' has no member named 'strcompare' 
4

3 回答 3

1

首先,在这种情况下,.绑定比 更紧密*,所以这个

*it.strcompare('p')

相当于

*(it.strcompare('p'))

所以你应该调用类似的东西

it->methodName(args)

其次,您需要调用 的方法std::string,大概是std::string::compare

请注意,如果您只想搜索等于 的条目"p",那么您所要做的就是

auto it = std::find(grid.begin(), grid.end(), "p");
if (it != v.end()) std::cout << "Princess found!" << std::endl;
于 2013-06-06T21:43:11.830 回答
0

类 std::string 是 basic_string (http://en.cppreference.com/w/cpp/string/basic_string),我不认为这个类有一个标准的 strcompare 成员函数(虽然一些编译器确实提供了一个)。

我认为您正在尝试执行以下操作:

if(*it == String("P"))

可以更简单地写成:

if(*it == "P")

例如:http: //ideone.com/isa9Il

于 2013-06-06T21:48:40.533 回答
0

标准库中没有strcompare

也许你的意思是compare

此外,yes*it将是string- 但'p'不是。那是一个char. 您需要转换'p'string(例如string s(1,'p'))或将第一个(或最后一个)字符*it'p'(例如(*it)[0] == 'p'- 警告,不安全)进行比较

最后,其他人已经提到了这一点,但*it.strcompare不会绑定为(*it).strcompare,而是绑定为*(it.strcompare)。这意味着,您正在尝试调用strcompareiterator上调用的方法,而不是 iterator 所指的方法。即使string调用了一个方法strcompare(它没有调用),您的代码仍然无法编译。

于 2013-06-06T21:44:11.970 回答