aşağıdaki sıralı veri var:Algoritma Sıralama Dizeler (Homebrew "uniq -c") Sayma için
AAA 2
TCG 1
TTT 3
Biliyorum: Her dize tekrarlarını saymak istediğiniz
AAA
AAA
TCG
TTT
TTT
TTT
uniq -c
kullanarak bunu yapabilir, ancak burada sahip olduğum genel C++ kodunda fazladan işlem yapmam gerekiyor.
I ('pgras' önerisine göre değiştirilmiş) bu yapı ile şaşırıp:
#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;
}
Bu yanlış sonuç yazdırır:
AAA 0
AAA 1
TCT 0
TTT 0
TTT 1
TTT 2
TTT 2
Bu derleme olmayacaktır. Örneğin, sayı tanımlanmamıştır. Senin "ekstra işlemenin" ne olduğu konusunda da net değilim. Daha spesifik olabilir misin? –
@John: Söz konusu uniq etiketini bir değer vererek işleyeceğim ve bu etiketleri sayımla birlikte tekrar yazdıracağız. AAA 2 -40 40 40 – neversaint
Üzgünüm, hala açık değilim. Son örneğinizde "40 40 40" nedir? –