Не могу понять, почему цикл for не захватывает последнее слово строки
#include <string>
#include<set>
using namespace std;
int main() {
string s;
int a{ 0 },tp{ 0 },v{ 0 };
string n{""},b{""};
getline(cin, s);
for(auto c:s) {
a++;
}
for (int i = 0; i <= a; i++) {
tp++;
n = n + s[i];
if (s[i] == ' ') {
cout << n << endl;
if (tp > v) {
v = tp;
b = n;
}
tp = 0;
n = "";
}
}
cout << b;
return 0;
}
Ответы (2 шт):
Автор решения: Harry
→ Ссылка
Потому что последним символом строки может не быть пробел, и if (s[i] == ' ') не сработает на последнем слове.
Если уж так хочется посимвольно слова собирать - то
int main()
{
string s, n;
if (getline(cin, s))
{
for (int i = 0; i < s.size(); i++)
{
if (s[i] == ' ')
{
if (n.size()) { cout << n << endl; n.clear(); }
}
else n += s[i];
}
if (n.size()) cout << n << endl;
}
}
Но можно и короче -
string s;
if (getline(cin, s))
{
istringstream ss(s);
for(string n; ss >> n;) cout << n << endl;
}