Как я могу разобрать ввод текста и преобразовать строки в целые числа? - PullRequest
0 голосов
/ 22 августа 2011

У меня есть файл ввода, в котором у меня есть следующие данные.

1 1Apple 2Orange 10Kiwi
2 30Apple 4Orange 1Kiwi

и так далее. Я должен прочитать эти данные из файла и работать с ним, но я не знаю, как получить данные. Я хочу сохранить 1 (из 1 яблока) как целое число, а затем Apple как строку. Я думал о том, чтобы прочитать весь 1Apple в виде строки. а затем что-то делать с функцией стои.

Или я мог бы читать все это символ за символом, а затем, если значение ascii этого символа лежит ч / б от 48 до 57, тогда я скомбинирую это как целое число и сохраню остальное как строку? Какой мне делать? Также, как я могу проверить, что является значением ASCII символа. (я должен преобразовать char в int и затем сравнить, или есть какая-то встроенная функция?)

Ответы [ 2 ]

1 голос
/ 22 августа 2011

Как насчет использования функции fscanf() тогда и только тогда, когда ваш шаблон ввода не изменится.В противном случае вам, вероятно, следует использовать fgets() и выполнить проверки, если вы хотите отделить число от строки, как вы предложили.

0 голосов
/ 22 августа 2011

Существует один простой правильный способ сделать это с помощью стандартных библиотек C, один довольно сложный правильный путь и множество неправильных способов. Это простой правильный путь:

  1. Считать всю строку в буфер char[], используя fgets.
  2. Извлечение чисел из этой строки с использованием strtol или strtoul.

Очень важно понять, почему более простые на вид альтернативы (*scanf и atoi) никогда не должны использоваться. Сначала вы можете написать меньше кода, но как только вы начнете думать о том, как обрабатывать даже слегка искаженный ввод, вы обнаружите, что вам следовало использовать strtol.

«Более сложный правильный путь» - использовать lex и yacc. Они намного сложнее, но и гораздо мощнее. Вы не должны нуждаться в них для этой проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...