#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
.