C/C++

Нужен код на С++

Дана строка Найдите слова, которые начинаются с одной буквы и заканчиваются этой буквой
Павел К
Павел К
88
#include <sstream>
#include <string>
#include <iostream>
using namespace std;
int main() {
system("chcp 1251 > nul");
cout << "Введите строку: ";
string line;
getline(cin, line);
istringstream iss(line);
string word;
while (iss >> word) if (word.at(0) == word.back()) cout << word << '\n';
system("pause > nul");
}
Андрей Масленников
Андрей Масленников
59 631
Лучший ответ
Александр Тимошин Ну тогда уже так
#include < iostream >
using namespace std;
int main() {
system("chcp 1251 > nul");
cout << "Введите строку: ";
string word;
while (cin >> word) if (word.at(0) == word.back()) cout << word << '\n';
system("pause > nul");
}
#include < iostream >
using namespace std;

bool into(const char *a,int&start,int&stop)
{
int begin = stop; //начало слова
int iter = stop+1; //текущий номер символа
while (*(a + iter) != '\0') //пока не конец строки
{
if (*(a + begin) == *(a + iter) && *(a+begin)!=' ' && (*(a + iter + 1) == ' ' || *(a + iter + 1) == '\0')) { start = begin; stop = iter; return true; } //если символ начала совпадает с текущим, не является пробелом, и после текущего символа - окончание или пробел - значит слово найдено
if (*(a + iter) == ' ') begin = iter + 1; // т. к. слово не может начинаться с пробела то сдвинуть начало
iter++;
}
return false; // слово не найдено
}

int main()
{
int start = 0, stop = 0;
const char* str = " Mimino mimim ostar rar far stoles";
while (into(str, start, stop)) // если слово найдено - печатаем его
{
for (int i = start; i <= stop; i++)
cout << *(str + i);
cout << " ";
}
}

Делаем функцию, которая находит совпадающие символы в словах. Тут я назвал ее into. Она принимает строку, два итератора (start и stop) и возвращает true если слово было найдено или false если нет. Если слово было найдено, то функция меняет переменные start и stop на позиции начала и конца найденного слова. Stop одновременно используется для указания начальной точки поиска в строке.
Запись типа *(str+iterator) аналогична str[iterator].
Виктор Косырев
Виктор Косырев
51 411
Алексей Лямкин Выделение токенов из строки всегда надо начинать с пропуска произвольного количества пустых символов.
while( *ptr && (*ptr ==' ' || *ptr == '\t' ) )
{
ptr++;
}
Удобнее инкрементировать указатель а не творить жуть вида *(a + begin)

Еще надо уточнить, что представленный код не будет работать со строкой в utf8, только в однобайтных кодировках