В зависимости от операционной системы и среды выполнения, использование setlocale может не всегда корректно влиять на обработку русских символов в консоли. Например, в Windows установка локали с помощью этой функции может не помочь при вводе/выводе русских символов в консоли, если сама консоль не настроена на правильную кодировку.
string txt =
" Возможность нахождения поисковых ключей в тексте и\n \
определения их количества полезна как для написания нового текста,\n \
так и для оптимизации уже существующего.";
cout << txt << endl;
int i=0; bool f= false; int cnt=0;
//if (txt[i]==' ') i++;
cout << "text= " << txt.length() << endl;
while (i< 255)
{
while (txt[i]!=' ')
{
if (txt[i]=='п' || txt[i]=='П') f= true;
i++;
}
i++; cout << " i= " << i << endl;
if (f) { cnt++; }
f= false;
}
cout << "В тексте найдено " << cnt << " букв 'п' или 'П'" << endl;
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main() {
system("chcp 1251 > nul");
string input;
cout << "Введите слова, разделенные пробелами: ";
getline(cin, input);
istringstream stream(input);
string word;
auto count = 0U;
const string pattern{ "Пп" };
while (stream >> word) {
for (auto letter : pattern) {
if (word.find(letter) != string::npos) {
++count;
break;
}
}
}
cout << "Количество слов, содержащих букву 'П' или 'п': " << count << endl;
system("pause > nul");
}
#include <sstream>
#include <string>
int main() {
setlocale(LC_ALL, "");
std::string input;
std::cout << "Введите слова, разделенные пробелами: ";
std::getline(std::cin, input); // Считываем всю строку с пробелами
std::istringstream stream(input);
std::string word;
int count = 0;
while (stream >> word) { // Считываем каждое слово
// Проверяем наличие буквы 'П' или 'п'
if (word.find('П') != std::string::npos || word.find('п') != std::string::npos) {
count++; // Увеличиваем счетчик, если буква найдена
}
}
std::cout << "Количество слов, содержащих букву 'П' или 'п': " << count << std::endl;
return 0;
}
Он всегда выдает кол-во слов равным нулю