c++ - 我怎样才能修改我的代码,以便给我看似输出?
问题描述
我的输入是这样的(前两行输入):
{4 <1,-1,-1> <1,1,-1> <-1,1,-1> <-1,-1,-1>} //first line
{4 <1,3,-1> <1,1,-1> <1,1,0.5> <1,3,0.5>}
{4 <1,3,-1> <-1,3,-1> <-1,1,-1> <1,1,-1>}
{4 <-1,3,-1> <-1,3,0.5> <-1,1,0.5> <-1,1,-1>}
{4 <1,3,0.5> <1,1,0.5> <0.75,1,1> <0.75,3,1>}
{4 <-0.75,3,1> <-0.75,1,1> <-1,1,0.5> <-1,3,0.5>}
{4 <-0.75,3,1> <0.75,3,1> <0.75,1,1> <-0.75,1,1>}
{4 <1,-1,0.5> <1,-0.75,1> <3,-0.75,1> <3,-1,0.5>}
{4 <1,-1,0.5> <3,-1,0.5> <3,-1,-1> <1,-1,-1>}
{4 <1,-1,-1> <3,-1,-1> <3,1,-1> <1,1,-1>} //tenth line
我有一个这样的代码,我希望按顺序读取每个括号,即 1、-1、-1,然后在输入文件中搜索它们以精细相似的括号并显示它们,但它没有:
#include <iostream>
#include <vector>
#include <string>
#include <fstream>
using namespace std;
using vecstr = vector<string>;
vecstr splitOut(const string &line) {
size_t pos = 0;
vecstr result;
while ( (pos=line.find('<',pos)) != string::npos ) {
size_t endpos = line.find('>',pos);
if ( endpos != string::npos ) {
string token = line.substr(pos+1,endpos-pos-1);
result.push_back(token);
} else {
}
pos = endpos;
}
return result;
}
int main ( ) {
ifstream iss("a.txt");
string line;
int offset;
unsigned int curLine = 0;
while (getline(iss,line)){
string test = line;
vecstr result = splitOut(test);
for ( auto s : result ) {
while(getline(iss, line)) {
curLine++;
if ((offset = line.find(s, 0)) != string::npos) {
cout << "found: " << s << " line: " << curLine << endl;
}
}
}
}
}
代码显示的所有输出(我的意思是它不考虑其他括号以及第一行显示的行不正确,它们应该是 9 和 10):
found: 1,-1,-1 line: 8
found: 1,-1,-1 line: 9
如何更改程序以向我显示这样的输出(例如对于第一个括号,即 1、-1、-1):
found: 1,-1,-1 line: 9
found: 1,-1,-1 line: 10
解决方案
如果我正确理解您的问题,您希望找到多次出现的数字三元组的行号。我建议保留一个unordered_map<string, int>
将每个三元组映射到您看到的第一行的 a。
然后,您可以按如下方式构建您的程序:
- 对于每一行,获取行上存在的三元组。(你已经有了)
- 对于每个三元组:
- 如果它出现在地图中,您发现了一个重复出现的三元组,请使用存储在地图中的行和当前行号进行报告。
- 如果不存在,请将其与当前行号一起添加。
您可以通过使用比int
. 例如,通过保留 a,pair<int, bool>
您可以只记录第一次重复,然后停止。或者您pair<int, int>
记录第一次出现和之后的重复次数。
推荐阅读
- xslt - Saxonica EE 作为 XSLT 转换器
- azure - 使用 Terraform 创建新版本的密钥保管库机密
- swift - 如何检索电子邮件链接以使用 Firebase 进行注册验证?
- apache - Mod_rewrite 重定向未按预期工作(在 htaccess 检查器中工作)
- entity-framework-core - 在前一个操作完成之前,在此上下文上开始了第二个操作。但是对 dbcontext 使用 AddTransient
- vb.net - 如何从 vb.net openxml IEnumerable(Of Row) 对象中删除一系列行?
- google-sheets - 是否可以使用两个标准单元格从第三列返回值?
- javascript - CSS过渡不适用于CSS动画
- javascript - TypeORM 关系只返回 id
- hbase - HBase 如何计算刷新大小?