#c 11
#c 11
Вопрос:
Предполагается, что программа получит строку, которая может содержать пустые строки, пробелы и строки разрыва. Итак, проблема в том, что я не могу использовать get line, потому что я не знаю, сколько строк разрыва будет использовать пользователь. Я попытался выполнить do while, но это не сработало, программа перестает работать. Это было время выполнения, которое получало char и использовало pushback insert в строке, в то время как char отличался от EOF. Я не знаю, как еще это сделать, или почему это do while не работает. Этот код использует get line, который не принимает строку разрыва.
'''''
#ifndef INDICE_H
#define INDICE_H
#include <cstddef>
struct Indice{
std::size_t f;
double p;
};
#endif
#include <iostream>
#include <sstream>
#include <string>
#include <iomanip>
#include <map>
#include "Indice.hpp"
int main()
{
std::string str;
std::getline(std::cin, str);
// Count the number of occurrences for each word
std::string word;
std::istringstream iss(str);
std::map<std::string,Indice> occurrences;
while (iss >> word) occurrences[word].f;
//Calculate the percentual each word
int total = 0.0;
for (std::map<std::string,Indice>::iterator it = occurrences.begin();
it != occurrences.end(); it)
{
total = it->second.f;
}
for (std::map<std::string,Indice>::iterator it = occurrences.begin();
it != occurrences.end(); it)
{
it->second.p = (static_cast<double>(it->second.f))/total;
}
// Print the results
for (std::map<std::string,Indice>::iterator it = occurrences.begin();
it != occurrences.end(); it)
{
if(it->first.size()>2)
std::cout << it->first << " " << it->second.f << " "<< std::fixed << std::setprecision(2) << it->second.p << std::endl;
}
return 0;
}
''''
Комментарии:
1. Это тот, который я использую, проблема в том, что он останавливается на строке разрыва ( n)
Ответ №1:
Два возможных решения:
#include <iostream>
#include <string>
int main(){
std::string line;
while(std::cin >> line){
//Variable line contains your input.
}
//Rest of your code
return 0;
}
Или:
#include <iostream>
#include <string>
int main(){
std::string line;
while(std::getline(std::cin, line)){
if (line.empty()){
break;
}
//Variable line contains your input.
}
//Rest of your code
return 0;
}