在C / C ++中迭代字母表

时间:2013-08-09 17:14:08

标签: c++ c

如何将以下代码翻译成C / C ++?

string alphabet = "abcdefghijklmnopqrstuvwxyz";

foreach(char c in alphabet)
{
    // Do something with the letter
}

我想循环进入字母表,并在按下按钮时打印每个字符。就像使用Xbox / PS3控制器时输入字符一样。您滚动到整个字母表集,然后按一个按钮进行输入。

基本上,这是在微控制器(mbed)环境中使用的。我只需要知道如何在C / C ++中循环创建正确的逻辑。

3 个答案:

答案 0 :(得分:11)

#include <string>
#include <algorithm>

void doSomething( const char& );

int main() {
  std::string alphabet = "abcdefghijklmnopqrstuvwxyz";
  std::for_each( alphabet.begin(), alphabet.end(), &doSomething);
}

#include <string>
#include <boost/foreach.hpp>

int main() {
  std::string alphabet = "abcdefghijklmnopqrstuvwxyz";
  BOOST_FOREACH( char c, alphabet) {
    //do something
  }
}

使用C ++ 2011

#include <string>
#include <algorithm>

int main() {
  std::string alphabet = "abcdefghijklmnopqrstuvwxyz";
  std::for_each( alphabet.begin(), alphabet.end(),[](const char& c){ /*do something*/} );
}

甚至

#include <string>

int main() {
  std::string alphabet = "abcdefghijklmnopqrstuvwxyz";
  for( char c : alphabet) {
    //do something
  }
}

编辑: 您在编辑中提到了在嵌入式环境中工作的愿望

int main() {
  const char* alphabet = "abcdefghijklmnopqrstuvwxyz";
  for( char* ptr = alphabet; *ptr!='\0'; ++ptr) {
    //do something (*ptr)
  }
}

EDIT2:

如果你知道你正在使用像ASCII这样的东西

int main() {
  for( char l = 'a'; l<='z'; ++l) {
    //do something (l)
  }
}

答案 1 :(得分:2)

您应该决定使用哪种语言; C和C ++是两种不同的语言,因此两种语言都没有一个答案。

在现代C ++中:

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

在老式的C ++中,有各种各样的选择;最不丑的可能是

for (size_t i = 0; i < alphabet.size(); ++i)
{
    char c = alphabet[i];
    //do something with letter
}

在C中,它取决于string是什么,因为没有具有该名称的标准类型。如果它是传统的零终止字符数组:

char const * alphabet = "abcdefghijklmnopqrstuvwxyz";

然后像:

for (char const * p = alphabet; *p; ++p)
{
    char c = *p;
    // do something with letter
}

答案 2 :(得分:-1)

#include <iostream>
#include <string>

int main ()
{
  std::string str ("abcdefghijklmnopqrstuvwxyz");
  for ( std::string::iterator itr=str.begin(); it!=str.end(); ++it)
  {
  //do something
  }
  return 0;
}