2013-08-09 3 views
-3

Как перевести следующий код на C/C++?Итерационный алфавит в C/C++

string alphabet = "abcdefghijklmnopqrstuvwxyz"; 

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

Я хочу зациклиться на алфавите и напечатать каждый символ при нажатии кнопки. Например, как вы вводите символ при использовании контроллера Xbox/PS3. Вы просматриваете весь набор алфавитов, а затем нажмите кнопку для ввода.

В основном это используется в микроконтроллере (mbed). Мне просто нужно знать, как создать правильную логику в цикле в C/C++.

+2

Что вы попробуете и где ты застрял? – shrm

+1

Это C++, вроде. Определенно не C. "string" – ChrisCM

+2

Любая ОС/GUI/что конкретно в частности? «Кнопка»? –

ответ

10
#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 
    } 
} 

EDIT: Вы упомянули в своем редактировать желание это работать во встроенной среде

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) 
    } 
} 
+0

Большое вам спасибо за это! – user1735120

+0

Нет 'std :: foreach', я думаю, вы имеете в виду' std :: for_each'. – Blastfurnace

+0

@Blastfurnace Да. Это то, что я получаю от ожидания, пока у меня нет компилятора. – KitsuneYMG

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

Я использовал бы 'алфавит [i]', а не 'i

+0

ОК, вы исправили его уже. :-) –

+0

Использование 'const char alphabet [] = ..'является немного более эффективным, поскольку он позволяет избежать перемещения (без отдельного символа для самого указателя), если этот код попадает в общую библиотеку. –