Sscanf с несколькими пробелами? - PullRequest
2 голосов
/ 24 мая 2010

sscanf (текст, "% s% s", имя, компания);

анализирует 'ian mceknis', но также анализирует 'ian mceknis' и так далее. Как я могу сделать это, чтобы разобрать только первый? Он должен содержать только один пробел, не более.

Спасибо.

Ответы [ 4 ]

2 голосов
/ 24 мая 2010

Если вы хотите, чтобы он отклонил последний пример, вам придется свернуть свою собственную функцию, чтобы найти / отклонить несколько пробелов.

Но я думаю, что вы действительно хотите удалить лишниепространства.См .: Как стандартным способом сократить начальные / конечные пробелы?

0 голосов
/ 10 декабря 2013

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

Поэтому я бы изменил:

sscanf(text, "%s %s", name, company);

на:

char space[2] = "\0\0"
sscanf(text, "%s%2[ ]%s", name, space, company);
if(space[1] != '\0') {
    //there was an extra space, handle it however
}
0 голосов
/ 24 мая 2010

Согласно определению sscanf, это абсолютно невозможно. Чтобы получить желаемый результат, я бы прочитал текстовую переменную вручную, ища два последовательных пробельных символа. Если найден, замените второй символ пробела на 0, а затем вызовите sscanf.

0 голосов
/ 24 мая 2010

Вы не можете сделать это, используя только sscanf(), который имеет довольно базовую функциональность. Если вам действительно нужно применять это (не так ли), регулярные выражения могут быть более подходящими здесь.

...