2015-09-17 4 views
2

Поэтому я использую map<string,int> для связывания строки с целочисленным значением, чтобы каждый int представлял количество строк, которые появляются в строке, и в конце я печатаю каждую строку и процентное количество раз появился .читать пустую нежелательную строку C++

мой код является то, что:

#include <bits/stdc++.h> 

using namespace std; 

typedef vector<int> vi; 
typedef pair<int,int> ii; 

typedef vector<string> mc; 

typedef vector<ii> vii; 


int main(int argc, char const *argv[]) 
{ 
    int T ; 

    cin>>T; 

    while(T--){ 
     string s; 
     map<string,int> m; 
     int to=0; 
     getline(cin,s); 
     while(getline(cin,s)){ 
      if(m[s]==0){ 
       m[s]=1; 
      } 
      else 
       m[s]++; 
      to++; 
     } 
     for (map<string,int>::iterator i = m.begin();i!=m.end();i++){ 
      cout<<i->first<<" "; 
      printf("%0.4lf\n",(double)i->second/(double)(to-1) *100.0); 
     } 


    } 



    return 0; 
} 

но той же причине выход:

3.4483 
Ash 13.7931 
Aspen 3.4483 
Basswood 3.4483 
Beech 3.4483 
Black Walnut 3.4483 
Cherry 3.4483 
Cottonwood 3.4483 
Cypress 3.4483 
Gum 3.4483 
Hackberry 3.4483 
Hard Maple 3.4483 
Hickory 3.4483 
Pecan 3.4483 
Poplan 3.4483 
Red Alder 3.4483 
Red Elm 3.4483 
Red Oak 6.8966 
Sassafras 3.4483 
Soft Maple 3.4483 
Sycamore 3.4483 
White Oak 10.3448 
Willow 3.4483 
Yellow Birch 3.4483 

для моего ввода:

1 

Red Alder 
Ash 
Aspen 
Basswood 
Ash 
Beech 
Yellow Birch 
Ash 
Cherry 
Cottonwood 
Ash 
Cypress 
Red Elm 
Gum 
Hackberry 
White Oak 
Hickory 
Pecan 
Hard Maple 
White Oak 
Soft Maple 
Red Oak 
Red Oak 
White Oak 
Poplan 
Sassafras 
Sycamore 
Black Walnut 
Willow 

и оно должно быть:

Ash 13.7931 
Aspen 3.4483 
Basswood 3.4483 
Beech 3.4483 
Black Walnut 3.4483 
Cherry 3.4483 
Cottonwood 3.4483 
Cypress 3.4483 
Gum 3.4483 
Hackberry 3.4483 
Hard Maple 3.4483 
Hickory 3.4483 
Pecan 3.4483 
Poplan 3.4483 
Red Alder 3.4483 
Red Elm 3.4483 
Red Oak 6.8966 
Sassafras 3.4483 
Soft Maple 3.4483 
Sycamore 3.4483 
White Oak 10.3448 
Willow 3.4483 
Yellow Birch 3.4483 

Я думаю, что, возможно, я прочитал как-то пустую строку, но я не могу понять, как я это сделал, кто-то может сказать мне, что я сделал неправильно, пожалуйста.

ответ

2

Внутри цикла while, в котором вы читаете файл, вам нужно проверить, что линия пуста или все пробелы, и пропустите ее, если она есть.

4

Это вполне ожидаемо. Ваш вход содержит две строки заголовка, и вы пропускаете только один. Простейшим решением было бы пропустить эту строку, используя второй вызов getline().

Кстати, пожалуйста, не используйте ярлык конкурентного кодирования при вставке кода в свой вопрос. (#include <bits/stdc++.h> и другие загадочные typedefs)

Смежные вопросы