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

Iterate alphabet in C/C++

本文关键字:字母表 C++ 迭代      更新时间:2023-10-16

如何将以下代码转换为C/C++?

string alphabet = "abcdefghijklmnopqrstuvwxyz";
foreach(char c in alphabet)
{
    // Do something with the letter
}

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

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

#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!=''; ++ptr) {
    //do something (*ptr)
  }
}

第2版:

如果您知道您正在使用类似ASCII 的东西

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

您应该决定使用哪种语言;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
}
#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;
}