Перейдем через строку char на char

Я пытаюсь выполнить итерацию по строке char с помощью char. Я пробовал что-то вроде этого:

void print(const string& infix)
{
char &exp = infix.c_str();
while(&exp!='\0')
{
         cout<< &exp++ << endl;
    }
}

Итак, эта функция вызывает печать ( "привет" ); должен вернуться:

h
e
l
l
o

Я пытаюсь использовать свой код, но он вообще не работает. btw параметр является ссылкой не указателем. Спасибо вам

Ответ 1

for(unsigned int i = 0; i<infix.length(); i++) {
    char c = infix[i]; //this is your character
}

Вот как я это сделал. Не уверен, что это слишком "идиоматично".

Ответ 2

Для вашего кода нужен указатель, а не ссылка, но если вы используете компилятор С++ 11, вам нужно всего лишь:

void print(const std::string& infix)
{
    for(auto c : infix)
        std::cout << c << std::endl;
}

Ответ 3

Если вы используете std::string, для этого действительно нет причин. Вы можете использовать итераторы:

for (auto i = inflix.begin(); i != inflix.end(); ++i) std::cout << *i << '\n';

Что касается вашего исходного кода, вы должны использовать char* вместо char, и вам не нужна эта ссылка.

Ответ 4

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