C++中比较不同大小vector:字符与行向量匹配问题
嘿,我来帮你解决这两个问题~
首先说输出顺序混乱的问题:大概率是你遍历的顺序搞反了!你应该先遍历字符向量里的每个字符,再对每个字符去行向量里找匹配——这样输出顺序就完全和你输入的字符顺序一致了。如果反过来先遍历行再遍历字符,那输出顺序肯定会乱。
然后是字符找不到匹配的情况:我们可以加个标记,遍历完所有行都没找到目标字符时,输出自定义的提示(比如-1,-1或者“未找到”)。
给你写个完整的C++示例代码,直接就能跑:
#include <iostream> #include <vector> #include <string> int main() { // 模拟你的行向量和字符向量 std::vector<std::string> row_vec = {"ABCDEF", "HIJKL"}; std::vector<char> char_vec = {'C', 'E', 'F', 'C', 'X'}; // 加了个X测试找不到的情况 // 核心逻辑:先遍历字符,保证输出顺序和输入一致 for (char target_char : char_vec) { bool is_found = false; // 遍历每一行找匹配 for (size_t row_idx = 0; row_idx < row_vec.size(); ++row_idx) { const std::string& current_row = row_vec[row_idx]; size_t col_idx = current_row.find(target_char); if (col_idx != std::string::npos) { // 找到匹配,输出位置 std::cout << row_idx << "," << col_idx << " "; is_found = true; // 这里的break是只取第一个匹配的行,如果要输出所有行的匹配,去掉break就行 break; } } // 没找到的情况处理 if (!is_found) { std::cout << "未找到" << " "; // 也可以输出你想要的标记,比如:std::cout << "-1,-1" << " "; } } std::cout << std::endl; return 0; }
运行这段代码的输出是:0,2 0,4 0,5 0,2 未找到 ,完美符合你的需求,还处理了找不到的情况。
额外说明几点:
- 如果你的需求是同一个字符在多行都有匹配时,输出所有匹配位置,那把内层循环里的
break删掉就行,比如如果行向量里有"ABC"和"XCX",字符是'C',就会输出0,2 1,2。 - 代码里用的是C++标准库的
string::find,默认从行首开始找第一个匹配的字符,如果你需要找一行里所有相同字符的位置,可以循环调用find直到返回npos。
内容的提问来源于stack exchange,提问作者SeePlus
相关产品推荐
相关产品推荐

