Member 13784265 Ответов: 1

Здесь я пытаюсь решить свою проблему, используя технику карт.


я только начал работать с картами, и именно этот код я пытался реализовать.когда я принимаю входные данные для string.it продолжает принимать входные данные, но не выводит код.как я могу изменить этот код, чтобы получить требуемый результат?

Что я уже пробовал:

#include<iostream>
#include<conio.h>
#include
#include<string>
#include<iterator>

using namespace std;

int main()
{
        map<string, int> stringCounts;
	string str;

	while (getline(cin, str)) 
          stringCounts[str]++;

	map<string, int>::iterator iter;
	for (iter = stringCounts.begin(); iter != stringCounts.end(); iter++)
	{
	cout << "word: " << iter->first << ", count: " << iter->second << endl;
	}
	_getch();
}

Richard MacCutchan

Вы должны сказать это, когда больше нет ввода. Используйте ^Z на консоли или проверьте наличие какой-то специальной строки.

1 Ответов

Рейтинг:
2

CPallini

На самом деле ваш код (или его компилирующая версия) работает.

#include <iostream>
#include <map>
#include <string>
#include <iterator>

using namespace std;

int main()
{
  map<string, int> stringCounts;
  string str;

  while (getline(cin, str))
    stringCounts[str]++;

  map<string, int>::iterator iter;
  for (iter = stringCounts.begin(); iter != stringCounts.end(); iter++)
  {
    cout << "word: " << iter->first << ", count: " << iter->second << endl;
  }
}

входной сигнал образца:
as
asas
asas
aa

выход
word: aa, count: 1
word: as, count: 1
word: asas, count: 2


[обновление]
Та же программа написана с использованием современных C++:
#include <iostream>
#include <map>

using namespace std;

int main()
{
  map<string, int> stringCounts;
  string str;

  while (getline(cin, str))
    stringCounts[str]++;

  for (auto p : stringCounts)
    cout << "word: " << p.first << ", count: " << p.second << endl;
}

[/обновление]


Member 13784265

я использую те же входные данные, что и вы, но он продолжает запрашивать входные данные

CPallini

Потому что вам нужно ввести символ EOF (CTRL+Z в Windows), чтобы выйти из цикла while.

Member 13784265

как я могу проверить частоту каждого слова в строке, используя ту же технику ?

CPallini

Разделите строку и вставьте полученные слова в карту.