-1

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

string alphabet = "abcdefghijklmnopqrstuvwxyz";

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

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

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

4

3 回答 3

14
#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)
  }
}

编辑2:

如果您知道您使用的是 ASCII 之类的东西

int main() {
  for( char l = 'a'; l<='z'; ++l) {
    //do something (l)
  }
}
于 2013-08-09T17:24:30.190 回答
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
}
于 2013-08-09T17:24:46.270 回答
-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;
}
于 2013-08-09T17:22:25.090 回答