c++ - 比较 vector<string> 内的行

标签 c++

如何从 vector 中读取行并比较它们的长度?我已将字符串放入 vector 中,现在想找到最长的行并将其用作我的输出。我将此作为我的代码,一直到比较字符串:

ifstream code_File ("example.txt");

size_t  find_Stop1, find_Stop2, find_Stop3, find_Start;
string line;
vector<string> code_Assign, code_Stop;


if (code_File.is_open()) {
    while ( getline(code_File,line)) {



        find_Start = line.find("AUG");                        // Finding all posssible start codes
        if (find_Start != string::npos) {
            line = line.substr(find_Start);
            code_Assign.push_back(line);                            //adding line to Code_Assign


            find_Stop2 = line.find("UGA");                              //  Try and find stop code.
                if (find_Stop2 != string::npos) {

                    line = line.substr(line.find("AUG"), find_Stop2);
                    code_Stop.push_back(line);                          // Adding it to code_Stop vector
                                                }

           find_Stop1 = line.find("UAA");                               //   finding all possible stop codes.
                if (find_Stop1 != string::npos) {
                    line = line.substr(line.find("AUG"), find_Stop1);     // Assign string code_1 from start code to UGA
                    code_Stop.push_back(line);                          //Adding to code_Stop vector
                                                }


           find_Stop3 = line.find("UAG");                               //  finding all possible stop codes.
                if (find_Stop3 != string::npos) {
                    line = line.substr(line.find("AUG"), find_Stop3);
                    code_Stop.push_back(line);                          //Adding to code_Stop vector
                                                }


            }



    }

    cout << '\n' << "Codes to use: " << endl;
        for (size_t i = 0; i < code_Assign.size(); i++)
            cout << code_Assign[i] << endl;

    cout << '\n' << "Possible Reading Frames: " << endl;
        for (size_t i = 0; i < code_Stop.size(); i++)
            cout << code_Stop[i] << endl;

    cout << endl;


    std::vector<std::string>::iterator longest = std::max_element(code_Stop.begin(), code_Stop.end, compare_length);

    std::string longest_line = *longest; // retrieve return value



    code_File.close();


}
else cout << "Cannot open File.";

尝试澄清我当前的输出是在 code_Stop vector 中:

Possible Reading Frames:

AUG GGC CUC GAG ACC CGG GUU UAA AGU AGG

AUG GGC CUC GAG ACC CGG GUU

AUG AAA UUU GGG CCC AGA GCU CCG GGU AGC GCG UUA CAU

我只想排最长的队。

请注意,我只是在学习 vector ,所以请多多关照...我从这个论坛上得到了很多帮助,非常感谢。

埃德。我更改了代码以显示我放置它的位置,它给了我“程序接收信号:'EXC_BAD_ACCESS'”。我做了什么?

最佳答案

这应该有效:

#include <string>
#include <vector>
#include <algorithm>

bool compare_length(std::string const& lhs, std::string const& rhs) {
    return lhs.size() < rhs.size();
}

int main() {
    std::vector<std::string> lines; // fill with data
    std::vector<std::string>::iterator longest = std::max_element(
                                           lines.begin(), lines.end(),
                                           compare_length);
    std::string longest_line = *longest; // retrieve return value
}

compare_length 是一个比较两个给定字符串长度的函数。如果第一个字符串比第二个字符串短,则返回 true,否则返回 false

std::max_element 是一种标准算法,它使用指定的比较函数查找序列中的最大元素。 lines.begin()lines.end() 返回序列 lines 开始和结束的迭代器,从而指定范围算法应该扫描。

关于c++ - 比较 vector<string> 内的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8238620/

相关文章:

c++ - 简单引用计数 : smart pointers

c++ - 如何启用 VS2013 c++ 编译器功能?

c++ - 单链表不起作用 (C++)

c++ - 如何确定 QPushButton 的释放信号是自动重复还是实际鼠标释放的结果

c++ - 使用 QStyle 设置全局默认最小 QPushButton 高度

C++ 从一个字符中获取指定的部分

c++ - QPushButton 改变颜色后调整大小

c++ - 用户界面说明

C++ tolower 特殊字符,如 ü

c++ - 生成文件 "nothing to be done"