Знание конца строки std :: в цикле

Мне интересно, как узнать конец строки std :: в цикле?

например:

while(string.eof()) {}

Помня, что это с std :: string

Спасибо вам всем.

3 ответа

Вы можете перебирать строку, подобную петле, через стандартный контейнер библиотеки:

for (auto c : s)
{
 // do something with c
}

или

for (auto it = s.begin(), end = s.end(); it != end; ++it)
{
 // do something with it
}

где s - строка.


"Я не хочу взаимодействовать со строкой, просто хочу цикл, пока конец строки не наступил".

На самом деле строка представляет собой контейнер (конкретный массив), а не файл. Он не поддерживает какое-либо состояние и не имеет таких методов, как eof. Поэтому вы не можете этого сделать.

Если у вас есть обычный массив char buf[SZ]; что тогда "конец массива не приходит"? Бессмысленная. Индекс массива может указывать на последний элемент, а также итераторы строк, показанные выше.


вы можете использовать итераторы

string str="abcd";
string::iterator it=str.rbegin();//iterator pointing on d

если вы хотите сделать что-то до последнего персонажа, вы можете сделать так

for (string::iterator it2=str.begin(); it"!=str.rbegin();++it){
 cout<<"Inside the string but not the last character\n";
}

licensed under cc by-sa 3.0 with attribution.