我正在编写一个带有这样的txt文件的程序:
foo.txt的:
increment()
在每一行中,它将ID(Aaa ..)存储到一个向量中(每个值一次),以及由/分隔的值。
所以第一行是:
Aaaa/NGACG/NGAA//
Aaab/AGGGC//
Aaac/CTN/AGGC/NNA//
伪代码是这样的:
foo.push_back("Aaaa");
string bar = NGACG;
foo.push_back("Aaaa");
string bar2 = NGAA;
我的伪代码显然存在缺陷,但这就是我想要做的一般想法。我查阅了如何解析的指南,但没有什么能真正起作用。如何在不完全低效的情况下做到这一点?我不记得如何在不使用任意数量的while循环的情况下编写它
答案 0 :(得分:1)
你可以使用fgets
和strtok
来好的旧C方式:
char line[SIZE]; // make sure SIZE is greater than your longest input line ...
char *ix;
while(fgets(line), SIZE, fdin) {
line[strcspn("\n")] = '\0'; // remove EOL
ix = strtok(line, "/");
foo.push_back(string(ix));
string bar = string(strtok(NULL, "/"));
string bar2 = string(strtok(NULL, "/"));
...
}
或者您可以将stringstream
和std::getline
与分隔符参数一起使用:
string line;
while(getline(fdin, line)) {
string temp, bar, bar2;
istringstream is(line);
getline(is, temp, '/');
foo.push_back(temp);
getline(is, bar);
getline(is, bar2);
...
}
当然,您应该为错误条件添加测试...
答案 1 :(得分:0)
您可以将行(或整个文件)读入简单的char数组并使用您直接读取的行:只需将/
替换为'\0'
,并将指向下一个字符的char指针指向很线,没有复制任何东西。空字节终止原始数据中斜杠之间的“值”,并且是所有意图和目的的C字符串。