Программа форматирования кода на C (итератор не разыменовывается)?

#c

#c

Вопрос:

Я пытаюсь создать программу форматирования кода C на C , но я наткнулся на проблему. Я получаю ошибку «строковый итератор не разыменовывается». Программа не компилируется, если файл не имеет длину всего около 2 строк или я сохраняю функцию insert() только в одном случае.Я также пытался преобразовать string в char вместо этого и увеличить целое число, но это не сработало со строковыми функциями. Какие-либо решения этой проблемы?Может быть, есть более простой способ создать эту программу, о которой я не знаю?Также я не настолько хорош в этом. Заранее спасибо.

 for (std::string::iterator it = str.begin(); it != str.end();   it)

{
    switch (*it)
    {
    case '}':case '{':
    //  cout << *it << endl;
        if ((*it  ) != 'n') {

            str.insert(it, 'n');
            cout << str;
        }
        break;
    case ';':
        if ((*it   ) != 'n')
            str.insert(it, 'n');
        break;
    default:


        while (parenthesis>0) {
            if (*it == '(')
            {
                parenthesis  ;

            }
            else if (*it == ')') {
            parenthesis--;

            break;

            }//pos  ;

        } 
        break;

    }
}
  

Комментарии:

1. Поп-тест: если *it ‘;’, ‘{‘ или ‘}’, что *it вычисляется? У вас есть 30 секунд, чтобы придумать ответ, часы тикают…

2. Он должен возвращать следующий символ из строки.

3. Почему бы вам не попробовать это самостоятельно, в отладчике, и посмотреть, правы ли вы (вы не правы).

4. Я только что сделал, и это то, что я получил после его увеличения. Хотя, скорее всего, это неправильно, поскольку у вас гораздо больше опыта, чем у меня. Я создал строку, состоящую из «{h», и после увеличения из «{» я получил букву «h».

5. Нет, вы этого не сделали. Что бы вы ни делали, либо значение *it не было ‘h’, либо вы не печатали значение *it . *it не является «после увеличения». Я никогда ничего не говорил о том, где it указывает после *it .