2014-03-01 44 views
1

我想知道如何知道循环中std :: string的结尾?知道循环中的std :: string的结尾

例如:

while(string.eof()) {} 

记住,它是用的std :: string

谢谢大家。

+0

使用'str.begin()'和'str.end()'。 – 0x499602D2

+1

请注意''while(!eof())'通常被错误地使用。 – chris

回答

8

你也可以遍历了一个标准库容器像你循环一个字符串:

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

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

其中s是字符串。

+3

@ SH.0x90:这甚至不是一个有意义的句子...... –

+1

@ SH.0x90好的,不要在循环中使用'c'或'it'。 – juanchopanza

+1

你可以为像我这样认为迭代器破坏性能的偏执狂人士添加整数:D;注意:把iter.end()拉入变量,编译器应该这样做,但你永远不知道 – Creris

1

可以使用迭代器

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"; 
} 
+0

你是什么意思? – Gabriel

+0

例如:当一个字符串的末尾,一个字符串的最后一个字符没有出现时,我会在循环内部做一些事情并继续,直到字符串的末尾出现,当它到来时,我打破循环。 - 看看eof的例子。 –

+1

有帮助吗? – Gabriel

1

“我不想与互动字符串,只需要一个循环,而字符串 的末尾不会出现。“

真的是字符串是一个容器(特定数组),而不是文件。它不支持任何状态,并且不具有像eof这样的任何方法。所以你不能这样做。

如果你有一个普通的数组char buf[SZ];那么'数组的末尾没有来'是什么? 毫无意义。数组索引可以指向最后一个元素,上面显示的字符串迭代器也是如此。

+0

是的,我明白。看到上面的答案,我意识到我需要使用迭代器来操纵并以某种方式“知道”字符串的结尾。谢谢。 –