Вот код, над которым я работаю. Он получает количество слов из строки, но теперь я пытался применить ту же логику, используя карты, но не смог этого сделать, поскольку карты не могут принимать значение ключа во время выполнения. Как я могу хранить каждое слово в ключе из строки в разных ключах каждый раз, чтобы я мог получить фактическое количество слов. Любая идея, как я могу это сделать?
#include<iostream>
#include<conio.h>
#include<string>
using namespace std;
int main()
{
map<string, int> stringCounts;
map<string, int>::iterator iter;
string words;
int TOTAL = 0;
char a[1000];
cout << "enter the string = ";
cin.getline(a, 1000);
int Totalwords = 0;
int no = 0;
for (int i = 0; a[i] != '\0'; i++)
{
if ((int(a[i]) >= 65 && int(a[i]) <= 90) || (int(a[i]) >= 97 && int(a[i]) <= 122))
{
}
else
{
Totalwords++;
}
no = i;
}
TOTAL = Totalwords;
cout << "number of words = " << TOTAL << endl;
string *words = new string[TOTAL];
for (int i = 0, j = 0; j < TOTAL, i <= no;)
{
if ((int(a[i]) >= 65 && int(a[i]) <= 90) || (int(a[i]) >= 97 && int(a[i]) <= 122))
{
words[j] = words[j] + a[i];
stringCounts[words[j]]++;
for (iter = stringCounts.begin(); iter != stringCounts.end(); iter++)
{
cout << "word: " << iter->first << ", count: " << iter->second <<
endl;
}
i++;
}
else
{
j++;
i++;
}
}
_getch();
}
как я могу создать ключевое значение, которое будет хранить каждое слово и учитывать его для каждой итерации? Я имею в виду, например, как ключ будет ключом, который будет создан и будет хранить первое слово предложения, а на следующей итерации будет создан новый ключ, и он будет хранить в нем следующее слово?
Думаю, вы не очень хорошо понимали, как работают карты. Проверьте этот учебник, а также этот сайт с документацией
@zeeshanmajeed Из вашего объяснения: вы хотите отредактировать ключ или каждый раз, когда вы хотите изменить его значение; это верно?
да именно @JeJo





how can i store each word in a key from a string in a different keys each time so that i can get actual word count .
Это можно сделать следующим образом. Вы даже можете иметь дело с каждым словом данного предложения / строки (при условии, что каждое слово было разделено пробелом).
Несколько замечаний:
#include<conio.h>)using namespace std;std::map<>, вы должны включить заголовок <map>Например, вот пример выходных данных теста: https://www.ideone.com/KGua1M
#include <iostream>
#include <map>
#include <string>
#include <sstream>
int main()
{
std::string inputString;
std::cout << "Enter the string = ";
std::getline(std::cin, inputString);
std::map<std::string, int> Map; // word, no. of times
size_t wordCount = 0;
size_t letterCount = 0;
std::stringstream sstr(inputString);
std::string word;
while (std::getline(sstr, word, ' '))
{
Map[word]++;
wordCount++;
letterCount += word.size();
}
std::cout << "Total Words: " << wordCount << "\n\n";
std::cout << "Total letters: " << letterCount << "\n\n";
std::cout << "Each words count\n\n" ;
for(const auto& it: Map)
std::cout << it.first << " " << it.second << " times\n";
return 0;
}
как я могу изменить мою собственную программу, чтобы я мог выполнять те же функции? Я попытался сделать что-то вроде того, что создал карту со строковым ключом и значением int во втором операторе if цикла for, чтобы на каждой итерации мое слово сохранялось в строке как ключ, но я не знаю, как я могу сохранить целое число, которое будет вести здесь подсчет слов? в конце я cout карту за пределами 2-го цикла for, который, к счастью, не сработал
именно это я и сделал. Вместо синтаксического анализа предложения или строки я использовал stringstream, который разделяет слова и каждый раз сохраняет или подсчитывает слово на карте.
что вы имеете в виду под карты не могут принимать ключевое значение во время выполнения? Вы можете добавлять и изменять элементы на карте во время выполнения ...