当前位置:  开发笔记 > 编程语言 > 正文

计算排序字符串的算法(Homebrew"uniq -c")

如何解决《计算排序字符串的算法(Homebrew"uniq-c")》经验,为你挑选了2个好方法。

我有以下排序数据:

AAA
AAA
TCG
TTT
TTT
TTT

我想计算每个String的出现次数:

AAA 2
TCG 1
TTT 3

我知道我可以使用uniq -c,但在这里我需要对我拥有的整个C++代码进行额外的处理.

我坚持使用这个结构(根据'pgras'建议修改):

#include 
#include 
#include 
#include 
using namespace std;


int main  ( int arg_count, char *arg_vec[] ) {
    if (arg_count !=2 ) {
        cerr << "expected one argument" << endl;
        return EXIT_FAILURE;
    }

    string line;
    ifstream myfile (arg_vec[1]);


    if (myfile.is_open())
    {
        int count;
        string lastTag = "";

        while (getline(myfile,line) )
        {
            stringstream ss(line);
            string Tag;

            ss >> Tag; // read first column
            //cout << Tag << endl; 

            if (Tag != lastTag) {
               lastTag = Tag;
               count = 0;
            }
            else {
                count++;
            }

             cout << lastTag << " " << count << endl;
        }
        cout << lastTag << " " << count << endl;
        myfile.close();

    }
    else {cout << "Unable to open file";}
    return 0;
}

它打印出错误的结果:

AAA 0
AAA 1
TCT 0
TTT 0
TTT 1
TTT 2
TTT 2

vartec.. 6

如果你只想打印出来,你的算法就可以了.如果要将其传递给另一个函数,可以使用例如STL映射.

map dict;

while(getline(myfile,line)) {
          string Tag;
          stringstream ss(line);
          ss >> Tag;
          if (dict.count(Tag) == 0) 
               dict[Tag] = 1;
           else
               dict[Tag]++;
}    


pgras.. 6

当标签与lastTag不同时,你必须重置计数器,如果标签不同,你必须递增...当标签不同时,你可以处理前一个标签及其相关的计数值(重置计数之前)......



1> vartec..:

如果你只想打印出来,你的算法就可以了.如果要将其传递给另一个函数,可以使用例如STL映射.

map dict;

while(getline(myfile,line)) {
          string Tag;
          stringstream ss(line);
          ss >> Tag;
          if (dict.count(Tag) == 0) 
               dict[Tag] = 1;
           else
               dict[Tag]++;
}    



2> pgras..:

当标签与lastTag不同时,你必须重置计数器,如果标签不同,你必须递增...当标签不同时,你可以处理前一个标签及其相关的计数值(重置计数之前)......

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有