比较文件中的字符串行

时间:2011-11-21 06:45:46

标签: c++

我有一个我已阅读过的文件,我想要读取每一行,就好像它是一个字符串,并比较每一行以查找某些关键字,如果我找到这些关键字,请取出这些关键字中的所有内容并制作新的串出来的。可以有多个具有相同关键字的行,因此我想创建单独的字符串...

我现在有一些丑陋的代码,放在这里会很尴尬,有人能指出我正确的方向如何做到这一点......

如果你愿意,我可以把我的代码放在这里,但我必须解释很多。

  

AGU UAC AUU GCG CGA UGG GCC UCG AGA CCC GGG UUU AAA GUA GGU GA

     

GUU ACA UUG CGC GAU GGG CCU CGA GAC CCG GGU UUA AAG UAG GUG A

      UUA CAU UGC GCG M GGC CUC GAG ACC CGG GUU UAA AGU AGG UGA

     

UGG M AAA UUU GGG CCC AGA GCU CCG GGU AGC GCG UUA CAU UGA

这将是我的文本文件的一部分。我想找到'M',然后找到以下实例:1)UAA,2)UAG,或3)UGA。并使每一个成为一个单独的字符串,以便我可以比较它们的长度。我尝试使用赋值运算符,但每次都会打印出相同的字符串。

ED。我想我想做的就是找到'M'的任何实例,当我这样做时,我想把整行写成一个字符串,这样我就可以比较字符串了。

ifstream code_File ("example.txt");   // open text file.
if (code_File.is_open()) {
    while (code_File.good()) {


        getline(code_File,line);    //get the contents of file 
        cout  << line << endl;     // output contents of file on screen.


            found = line.find_first_of('M', 0);               // Finding start code
        if (found != string::npos) {
           code_Assign.assign(line, int(found), 100);        //assign the line to code_Assign and print out string from where I found the start code 'M'.

            cout << endl << "code_Assign: " << code_Assign << endl << endl;

2 个答案:

答案 0 :(得分:1)

grepsedawk标准Posix实用程序似乎是一项不错的任务。

如果您想在程序中更快(更快),请考虑使用标准parsing技术,例如ANTLR

答案 1 :(得分:0)

然而,我并不清楚你想要做什么:

要读取一行并将其放在一个字符串中:使用std::getline

要在另一个字符串中查找固定字符串,请使用std::search;更多 如果你有一个复杂的模式,请使用boost::regex(或std::regex C ++ 11编译器)。 std::search将返回一个迭代器和两个 迭代器可用于构造新字符串。 regex解决方案 可以“捕获”,因此您可以访问插入的字符串 直接(或不是;很大程度上取决于模式的复杂程度,以及 当您要捕获的字符串是regex解决方案时,该解决方案不起作用 以重复的方式)。但是,如果没有更多信息,那就是 很难说更多。

尝试准确指定您的问题;我想你会发现那个 有助于找到解决方案。