如何在字符串向量中的每个字符串中迭代字符
How to iterate through characters in each string in a vector of strings?
尝试从向量迭代每个字符串中的每个字符,并验证所有字符都是"O"或"。">
//read file, put it in vector, and handle some errors
string line;
vector<string> currentgen;
while (getline(input_stream, line)) {
currentgen.push_back(line);
}
//iterate through every character in each string,
//and verify all characters are 'O' or '.'
for(int i = 0; i < currentgen.size(); i++){
for(int j = 0; j < i.length(); j++){
if(currentgen[i][j] != 'O' || currentgen[i][j] != '.'){
cerr << program_name << ": Bad Character in: "<<file_name<< "n";
exit(3)
}
}
}
这给出了一个错误:
错误:不同有符号性的整数表达式的比较:'int'和'std::vector<std::__cxx11::basic_string<char>>::size_type'{aka'long unsigned int'}对于(int i=0;i<currentgen.size((;i++({
从c++20,您可以迭代字符串向量中的每个字符,如下所示:
for(char c : currentgen | std::views::join | std::views::join)
{
// ...
}
这是一个演示。
当然,你最好使用一种算法,而不是手动迭代字符:
auto O_or_dot = [](char c) { return c == 'O' || c == '.'; };
if (not std::ranges::all_of(currentgen
| std::views::join
| std::views::join, O_or_dot))
cerr << program_name << ": Bad Character in: "<<file_name<< "n";
这是一个演示。
问题:
-
您使用了本应使用
&&
的||
;显然,一个字符总是不等于'O'
或'.'
中的一个,因此条件在书写时总是成立的;你想要:if(currentgen[i][j] != 'O' && currentgen[i][j] != '.'){ ^^ changed
-
exit(3)
后还有一个缺失的分号 -
出现了警告,使用
int
作为迭代变量让人很生气;使其成为size_t
可能会修复错误(尽管从技术上讲,正确的更改是使其成为vector<string>::size_type
(。一个更好的解决方案是让C++用一个for each循环来处理迭代,比如:for(const auto& str : currentgen){
然后首先避免对该循环进行索引。
相关文章:
- 如何在 c++ 中将字符串迭代器变量传递给函数?
- 字符串迭代器永远不会达到 std::string::end()
- 通过字符串迭代并将每个循环中的先前字符组合在一起
- 通过带有Sstream的字符串迭代
- 为什么C++字符串迭代器不检查错误?
- 将字符串::迭代器转换为标准::字符串
- 如何将字符串迭代器指向的数据推回字符串向量
- 为什么删除字符串迭代器会产生const char参考
- 字符串迭代器不兼容错误,当我将字符串转换为矢量<byte>时
- 从数组列表中的字符串迭代器获取 int dat<struct>
- 字符串迭代器不可用C 问题
- C++ 字符串迭代器"find first of"
- 表达式:字符串迭代器不兼容,调用"SetDllDirectory"
- 字符串迭代器和理解函数
- 为什么我的 forloop 在我的 lexical_words 函数中没有将字符串数组('keyWords")中的单词与字符串迭代器中的单词进行比较?
- UTF-8字符串迭代器
- 字符串迭代器+偏移量超出范围
- 字符串迭代器与读取每一行不兼容
- 字符串::迭代器必然是random_access_iterator
- 使用类型特征为字符串迭代器专门化模板函数