У меня есть следующие данные: отсортированныйАлгоритм подсчета Sorted строк (Homebrew "уник -c")
AAA
AAA
TCG
TTT
TTT
TTT
Я хочу, чтобы подсчитать число вхождений каждой строки:
AAA 2
TCG 1
TTT 3
Я знаю, что я может сделать это с помощью uniq -c
, но здесь мне нужно сделать дополнительную обработку всего кода на C++, который у меня есть.
Я застрял с этой конструкцией (модифицированный в соответствии с предложением 'pgras'):
#include <iostream>
#include <vector>
#include <fstream>
#include <sstream>
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
Это не будет компилироваться. Например, граф не определен. Я не понимаю, что такое ваша «дополнительная обработка». Можете быть более конкретными? –
@John: Мне нужно обработать этот тег uniq, предоставив некоторое значение, и снова напечатает эти теги вместе со счетчиком, например. AAA 2 -40 40 40 – neversaint
Извините, я все еще не понимаю. Что такое "-40 40 40" в вашем последнем примере? –