将vector元素转换为字符串进行比较
Making a vector element into a string for comparison?
我有点混淆了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
的方法(它没有),您的代码仍然无法编译。
相关文章:
- 视觉C++使用 map 来比较字符串中的每个单词
- 我正在尝试从输入文件中读取,然后使用它们的子字符串比较字符串的特定部分
- 比较字符串的 GetLine 工作一次,然后比较之后不起作用
- C++使用关系运算符比较字符串
- 通过默认复制构造函数比较 C++ 字符串是否会影响性能,原因为何?
- C++ TCP 服务器比较字符串失败
- 如何在不复制的情况下比较字符串的一部分?
- 比较 C++ 字符串打印中的两个整数数组
- 如何比较字符串形式的临时变量
- std::out_of_range 比较字符串中的符号时出错
- 比较字符串大小写不区分的简单方法是什么?
- 比较字符串忽略 NUL
- 比较字符串(arduino)时出现问题
- 如何在C++中比较字符串
- 比较字符串对象等于向量中的元素
- C 比较字符串操作速度
- 需要比较字符串的某些元素
- 比较字符串 .c_str() 和普通字符串的差异
- C 比较字符串的字符
- 通过使用两个不同的队列比较字符串