Вопрос задан 01.08.2023 в 08:19. Предмет Информатика. Спрашивает Приколист Магомед.

Дана строка, содержащая текст, заканчивающийся точкой. Вывести на экран слова, содержащие три

буквы. C++ // 9rab.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" #include #include using namespace std; int main() { setlocale(LC_ALL, "Russian"); string s; cout << "Введите фразу" << endl; cin >> s; cout << endl; for (int i = 0; i < s.length();i++) { if (s.length() == 3) { cout << s << endl; } } return 0; } Не работает,почему?Может по другому как-то?
0 0
Перейти к ответам

Ответы на вопрос

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Gladkov Kirill.
//Во-первых, строку нужно принимать через gerline, ибо через cin у вас в строку запишутся символы до первого пробела. Во -вторых, поиск слов из 3 символов выполнен неправильно, точнее он сработает в одном только случае, если вы введете строку из 3 символов, и то выведет 3 раза одно и то же слово.

//Вот как сделал я:

#include <iostream>

using namespace std;

int main()
{
string str;

int Size;
int ArrIndex = 0;

cout « "Enter string: ";
getline (cin, str);

string Element[str.length()];

for (int i = 0; i < str.length(); i++)
{
if (str[i] != ' ' && str[i] != '.')
Element[ArrIndex] += str[i];

else
ArrIndex++;
}

cout « endl;

for (int j = 0; j < str.length(); j++)
{
Size = 0;

for (int k = 0; k < Element[j].length(); k++)
Size++;

if (Size == 3)
cout « Element[j] « endl;
}

return 0;
}



0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Проблема в вашем коде заключается в неправильной проверке длины слова. Вы проверяете длину всей строки s.length() вместо длины каждого отдельного слова. Также, после считывания строки, вы не разбиваете её на слова.

Чтобы исправить код, вы должны разделить строку на слова и проверить длину каждого слова, выводя только те слова, которые имеют три буквы. Для этого вы можете использовать функции работы со строками из библиотеки #include <string>, такие как find_first_not_of, find_first_of и substr.

Вот исправленный код:

cpp
#include "stdafx.h" #include <iostream> #include <string> using namespace std; int main() { setlocale(LC_ALL, "Russian"); string s; cout << "Введите фразу" << endl; getline(cin, s); // Чтение строки с пробелами cout << endl; size_t pos = 0; // Позиция начала слова while (pos != string::npos) { // Найти позицию первого символа не являющегося буквой (разделитель слов) size_t start = s.find_first_not_of(' ', pos); // Если найден разделитель слов if (start != string::npos) { // Найти позицию первого символа являющегося буквой (начало слова) size_t end = s.find_first_of(' ', start + 1); // Если не найден конец слова, значит это последнее слово в строке if (end == string::npos) { end = s.length(); } // Выделить слово из подстроки и проверить его длину string word = s.substr(start, end - start); if (word.length() == 3) { cout << word << endl; } // Перейти к следующему слову pos = end + 1; } else { // Если не найден разделитель слов, значит это конец строки pos = string::npos; } } return 0; }

Этот код разделяет введенную строку на отдельные слова, проверяет длину каждого слова и выводит только те, которые состоят из трёх букв.

0 0

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос