Другие языки программирования и технологии

Помогите написать (исправить) программу на языке Си++

Дана строка-предложение. Вывести самое короткое слово в предложении (если таких слов несколько, то вывести первое из них).

Я попробовала написать, но почему-то выдает ошибку, совсем не знаю, как ее исправить

#include
using namespace std;

int main()
{
setlocale(0, "Rus");
char str[256];
cout << "Введите строку:";
cin.getline(str, 256);
char* ptr = strtok(str, ".,!?");
char* min = ptr;
do
{
if (strlen(min) > strlen(ptr))
min = ptr;
}
while (ptr = strtok(NULL, ".,!?"));
cout << "Самое короткое слово:" << min << endl;
system("pause");
return 0;
}
Russak ***
Russak ***
413
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <algorithm>
using namespace std;
vector<string> split(const string& line) {
istringstream iss(line);
vector<string> box;
string token;
while (iss >> token) box.emplace_back(token);
return box;
}
int main() {
system("chcp 1251 > nul");
cout << "String: ";
string line;
getline(cin, line);
auto box = split(line);
auto min_length = [](const string& a, const string& b) {
return a.length() < b.length();
};
auto min_token = *min_element(box.begin(), box.end(), min_length);
cout << min_token << '\n';
system("pause");
}
РИ
Ренат Ибрагимов
96 487
Лучший ответ
Вы в цикле do проверяете одно и то же слово. Если программа и запустится, то не остановится.
Алексей Акимов
Алексей Акимов
98 540
Олег . У меня все работает без изменений. И останавливается и даже слово правильное находит.
А библиотека string.h или cstring подключена? Если что это одна и та же библиотека с разными названиями для работы с сишными строками. Как различать:
cstring - впереди буквочка С говорит что это сишная библиотека
string.h - сзаде есть расширение то есть в данном случае это сишная библиотека, но тут можно путаться потому как например windows.h это не родная библиотека, а библиотека для работы с windows. То есть сторонние библиотеки тоже вполне могут иметь расширение *.h
string - стандартная библиотека для с++ и использования класса string

Дополнительная информация могла запутать, поэтому еще раз повторю что вам нужна именно сишная библиотека (cstring или string.h без разницы, на ваш выбор), так как strtok реализованно именно в ней. И среди разделителей не вижу пробела. Проверил побыстрому, у меня все работает.
Роман Эфендиев
Роман Эфендиев
15 408