Вывести только те слова сообщения, которые встречаются в нем ровно один раз

Twodi

Вывести только те слова сообщения, которые встречаются в нем ровно один раз. Помогите исправить ошибку в коде.
#include <iostream> 
 
#include <string> 
 
#include <vector> 
 
using namespace std; 
 
int main() 
{ 
  string s; 
  getline(cin, s); 
  int n = s.size(); 
  vector<string> a(n); 
  int k = 0; 
 
  for (int i = 1; i < s.size() - 1; i++) 
 { 
  if ((ispunct(s[i])) || (isspace(s[i]))) 
  k++; 
  else 
    a[k] += s[i]; 
 } 
 for (int i = 0; i <= k; i++) 
 { 
   int count_word = 1; 
 } 
 
cout « s « endl; 
return 0; 
}
2 ответа

Twodi

Twodi, я бы сделал так. Надеюсь, эта программа поможет вам разобраться во всем.
#include <iostream>
#include <string>
#include <vector>
 
using namespace std;
 
int main()
{
int k;
vector<std::string> A;
string a, b;
cout << "Введите текст сообщения:" << endl;
getline(cin, a);
a = a + ' ';
for (int i = 0; i < a.length(); i++)
{
if (isalpha(a[i])) b += a[i]; 
if ((!(isalpha(a[i]))) && (b != ""))
{
A.push_back(b);
b = "";
}
}
cout << "Уникальные слова:" << endl;
for (int i = 0; i < A.size(); i++)
{
k = 0;
for (int j = 0; j < A.size(); j++)
{
if (A[i] == A[j]) k++;
}
if (k == 1)
{
cout << A[i] << endl;
}
}
system("pause"); 
return 0;   
}


Twodi

А что мешает загнать слова и количество вхождений в map, после чего просто пройтись по map-у и вывести что нужно? Да и потоковый оператор >> (string&) вычитывает отдельные слова.