将vector元素转换为字符串进行比较

Making a vector element into a string for comparison?

本文关键字:比较 字符串 vector 元素 转换      更新时间:2023-10-16

我有点混淆了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' 

首先,在这种情况下,.*结合更紧密,所以

*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;

类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

标准库中没有strcompare

也许你指的是compare ?

同样,是的*it将是string——但'p'不是。这是char。您需要将'p'转换为string(例如string s(1,'p'))或将*it中的第一个(或最后一个)字符与'p'(例如(*it)[0] == 'p'—警告,不安全)进行比较

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