索引C ++字符串的最简单方法?

时间:2013-05-28 15:30:21

标签: c++ string

我希望能够遍历C ++字符串中的每个字符。最简单的方法是什么?首先将其转换为C字符串?我实际上无法以任何方式使它工作,但这是我到目前为止所尝试的:

string word = "Foobar";  
for (int i=0; i<word.length(); ++i) {
  cout << word.data()[i] << endl;
}

6 个答案:

答案 0 :(得分:5)

您可以直接在字符串上使用operator[]。它超载了。

string word = "Foobar";  
for (size_t i=0; i<word.length(); ++i) {
  cout << word[i] << endl;
}

答案 1 :(得分:5)

你应该使用Iterator。此方法适用于大多数STL的容器。

#include <iostream>
#include <string>

int main()
{
  std::string str("Hello world !");

  for (std::string::iterator it = str.begin(); it != str.end(); ++it)
     std::cout << *it << std::endl;                                              
}

答案 2 :(得分:2)

std::string公开随机访问迭代器,因此您可以使用它们来迭代字符串中的每个字符。

答案 3 :(得分:2)

迭代整个字符串的最简单方法是使用基于循环的C ++ 11范围:

for (auto c : word)
{
  std::cout << c << std::endl;
}

否则,你可以通过operator[]访问单个元素,就像使用数组一样,或者使用迭代器:

for (std::string::size_type i = 0, size = word.size(); i < size; ++i)
{
  std::cout << word[i] << std::endl;
}

for (auto i = word.cbegin(), end = word.cend(); i != end; ++i)
{
  std::cout << *i << std::endl;
}

答案 4 :(得分:2)

你应该有什么工作(合理的短弦);虽然你可以访问每个角色word[i]而不用乱搞指针。

迂腐地说,您应该使用string::size_typesize_t而不是int

您可以使用迭代器:

for (auto it = word.begin(); it = word.end(); ++it) {
    cout << *it << endl;
}

(在C ++ 11之前,您必须提供类型名称string::iteratorstring::const_iterator而不是auto。)

在C ++ 11中,您可以遍历范围:

for (char ch : word) {
    cout << ch << endl;
}

或者您可以将for_each与lambda:

一起使用
for_each(word.begin(), word.end(), [](char ch){cout << ch << endl;});

答案 5 :(得分:0)

其他人已经指出,最简单的方法是使用[]运算符,在字符串类中重载。

string word = "Foobar";  
for (int i=0; i<word.length(); ++i) {
  cout << word[ i ] << endl;
}

如果您已经知道如何迭代C字符串,那么有一种机制,类似于C中的指针,您可以使用它,并且性能会更高。

string word =“Foobar”;
for(string :: const_iterator it = word.begin(); it!= word.end(); ++ it) {   cout&lt;&lt; *它&lt;&lt; ENDL; }

你有const迭代器和常规迭代器。当您计划更改它们指向的数据时,将使用后者进行迭代。前者适用于只读操作,例如控制台转储。

string word = "Foobar";  
for (string::iterator it = word.begin(); it != word.end(); ++it)
{
    (*it)++;
}

使用上面的代码,您将使用下一个字符“加密”您的单词。

最后,你总是有可能回到C指针:

string word = "Foobar";
const char * ptr = word.c_str();

for (; *ptr != 0; ++ptr)
{
    (*ptr)++;
}

希望这有帮助。