IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Считать информацию из строки, pelles C
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 125
Пол: Женский

Репутация: -  1  +


здравствуйте. подскажите пожалуйста... Вот, к примеру, мы считываем строку вот так:

 sscanf(str, "%s %s %s %d", value.nomer, value.name, value.kinokomp, &value.prodol);


однако так правильно считывет, если все задано по одному слову.
а если value.kinokomp задано несколькими словами, заключенными в скобки, то как быть?

спасибо)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


Цитата
а если value.kinokomp задано несколькими словами, заключенными в скобки, то как быть?

Пользуемся мало кому известными возможностями ...scanf - возможностью работать с регулярными выражениями и возвращаемым значением. С их помощью задача решается в 2 строки:

    if(sscanf(str, "%s%20[^(](%20[^)])%d",
value.nomer, value.name, value.kinokomp, &value.prodol) != 4)
{
sscanf(str, "%s%s%s%d",
value.nomer, value.name, value.kinokomp, &value.prodol);
}
, т.е., сначала пытаемся распарсить строку с учетом того, что value.kinokomp заключен в круглые скобки. Проверяем, сколько полей было заполнено успешно. Если не все 4 - то скобок не было, читаем, как обычно. Если 4 - то нам повезло, строка была со скобками, и была сразу корректно разобрана, второй проход делать не надо.

Немного о "магических" числах. Я имею в виду, 20-ку. Это максимальное количество символов, которое может поместиться в соотв. строку. То есть, я для теста задал структуру так:

struct s
{
char nomer[21];
char name[21];
char kinokomp[21];
int prodol;
};

, поэтому могу в каждое строковое поле читать не больше 20 символов. Если у тебя описано по другому - задавай другое значение в форматной строке...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 125
Пол: Женский

Репутация: -  1  +


хм....никогда не встречалась с таким, теперь буду знать!)) спасибо большое)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 4.05.2024 2:17
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name