Разбор строки в несколько строк - PullRequest
2 голосов
/ 03 февраля 2012

Я должен разбить строку на несколько.На самом деле мне нужно проанализировать некоторые входные данные из файла, например, в следующем формате (i9, i9, i2).

i9 означает десятичное число как: (5blankspaces) 4567

Так что мне нужно правильно восстановить эти цифры.Ширина всегда фиксирована, поэтому каждое число должно подчиняться этому.Правильный экземпляр этого формата:

(5 пробелов) 4567 (6 пробелов) 453 (1 пробел) 2 или (5 пробелов) 4567 (6 пробелов) 45322 (где 22 - аргумент для i2 в данном случае)

Пробелы перед числами вызывают у меня головную боль, поэтому я подумал, что могу разбить каждый аргумент на массив символов и затем преобразовать его в целое число, так как спецификатор% d игнорирует все пустое пространство, и я не знаю, как использовать ширинуа также игнорируя пробелы .. (если это можно сделать, я имею в виду, анализируя все в целое число, скажите, пожалуйста, так !!)

Если нет ... ну, мне нужна помощь, чтобы разобрать каждую строку в подстроку,пока я сделал это, но это не работает:

while (fgets(buffer, 600, f)) {
    sscanf(buffer, "%9[^\n]s %9[^\n]s %2[^\n]s", arg1, arg2, arg3);
    ....
}

Пожалуйста, любая помощь будет принята с благодарностью !!!

Ответы [ 2 ]

3 голосов
/ 03 февраля 2012

Это ответ C. Вот почему я использовал имя переменной new.

Используйте strncpy() и завершите результат правильно .

char part1[10], part2[10], part3[3];
const char *new = "     4567      45322\n"; /* the line read */

strncpy(part1, new, 9);    part1[9] = 0;
strncpy(part2, new+9, 9);  part2[9] = 0;
strncpy(part3, new+18, 2); part3[2] = 0;

Я предлагаю вам не пытаться писать многоязычные исходные файлы.

2 голосов
/ 03 февраля 2012

В C ++ используйте substr() вместе с обычными преобразованиями строк в целые числа:

#include <string>

std::string s = "     1234      78922";

std::string s1 = s.substr(0, 9);
std::string s2 = s.substr(9, 9);
std::string s3 = s.substr(18);   // or substr(18, 2)

int n1 = std::stoi(s1), n2 = std::stoi(s2), n3 = std::stoi(s3);

Примените обычные проверки длины, где это уместно, чтобы проверить, что ввод действительно в правильном формате.

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