Ответ 1
for(unsigned int i = 0; i<infix.length(); i++) {
char c = infix[i]; //this is your character
}
Вот как я это сделал. Не уверен, что это слишком "идиоматично".
Я пытаюсь выполнить итерацию по строке char с помощью char. Я пробовал что-то вроде этого:
void print(const string& infix)
{
char &exp = infix.c_str();
while(&exp!='\0')
{
cout<< &exp++ << endl;
}
}
Итак, эта функция вызывает печать ( "привет" ); должен вернуться:
h
e
l
l
o
Я пытаюсь использовать свой код, но он вообще не работает. btw параметр является ссылкой не указателем. Спасибо вам
for(unsigned int i = 0; i<infix.length(); i++) {
char c = infix[i]; //this is your character
}
Вот как я это сделал. Не уверен, что это слишком "идиоматично".
Для вашего кода нужен указатель, а не ссылка, но если вы используете компилятор С++ 11, вам нужно всего лишь:
void print(const std::string& infix)
{
for(auto c : infix)
std::cout << c << std::endl;
}
Если вы используете std::string
, для этого действительно нет причин. Вы можете использовать итераторы:
for (auto i = inflix.begin(); i != inflix.end(); ++i) std::cout << *i << '\n';
Что касается вашего исходного кода, вы должны использовать char*
вместо char
, и вам не нужна эта ссылка.
std::string:: c_str() возвращает const char*
, вы не можете использовать char&
для его хранения. Также exp уже указатель, вам не нужна ссылка:
Лучше использовать итератор:
void print(const string& infix)
{
for (auto c = infix.begin(); c!=infix.end(); ++c)
{
std::cout << *c << "\n";
}
std::cout << std::endl;
}
Чтобы исправить исходный код, попробуйте:
void print(const string& infix)
{
const char *exp = infix.c_str();
while(*exp!='\0')
{
cout << *exp << endl;
exp++;
}
}