...
char *String;
//указатель на текстовую строку
//неопределенной длины. Никакой
//разницы нет, если вместо указателя
//явно определить строку,
//типа
char String1[32];
...
int StrLenth;
StrLenth=strlen(String);
//имеем длину строки, т.е. количество символов
//есть ньюанс с Юникодом (UTF8), в котором
//один не английский символ определяется
//двух-байтным числом
...
strcpy(String1, String);
//копируем в String1 текст со String.
//надо заметить, что длина String может превышать
//длину String1. Поэтому все данные
//(в нашем случае длина String1 - 32 байта)
//которые выходят за 32 байта потеряются.
//Эту операцию можно проводить и над указателем,
//но предварительно под указатель надо отвести
//память (malloc)
...
strncpy(String1, String, 5);
//тоже, что и strcpy, отличается (5) явным
//указанием количества копируемых байт
...
//в свое время я ипользовал конструкции типа:
int s=5; //смещение байт
strncpy(String1+s, String, 2);
//Если у нас была строка String1
//то в данном случае мы имеем копирование
//первых 2-х байт строки String в строку
//String1 со смещением в 5 байт
...
scanf: миф или правда
Не поможет ли кто мне:
говорят функция scanf может разобрать любой формат. Как мне разобрать формат вида:
string1|string2|.....?
Заранее благодарен
Если Вас интересует разбор регулярных выражений, то лучше поискать соответствующую библиотеку, или внешнюю утилиту.
Ибо юзай pcre! в булдере она(библа с хидером и , видимо дллина тоже) есть - хотя про неё ни слова в хелпе нет, просто инклюдишь pcre.h ищешь в инете описание библы...можешь взять ещё ключевое слово : pcre_exec :) парсит всё!
Можно воспользоваться цивильной оболочкой от SysTools - поискай на сорсфордже, это пакет классных утилит завёрнутых в компоненты - интерпритаторы мат выражений, регэкспы, математика повышеной точности и т.д.
char *strsep(char **str, char *delim);
возвращяет строку до delim в str записывает str после delim(delim не включается). Просто и сердито. Спасибо кто откликнулся
PCRE - Posix Regular Expressions - это далеко не билдеровский навороты и как писатель под линукс Вы должны знать об этом лучше меня :)))) Это потом по просьбам нуждающихся регулярные выражения были портированы почти подо всё! для простого случая может их и не стоит использовать но что-нить более-менее сложное - просто незаменимо, один раз попробовал, без них больше немогу.
Сорри, обознался.:roll: Все равно они в ANSI C не входят, как впрочем и функция strsep. Правда последняя все же более переносима. Я где-то видел переделанный scanf специально обученный для разбора всего чего угодно. Но не помню где. Проще самому написать, потом кайфовать.
Цитата:
Originally posted by Elf
Здравствуйте, все!
Не поможет ли кто мне:
говорят функция scanf может разобрать любой формат. Как мне разобрать формат вида:
string1|string2|.....?
Заранее благодарен
Здравствуйте, все!
Не поможет ли кто мне:
говорят функция scanf может разобрать любой формат. Как мне разобрать формат вида:
string1|string2|.....?
Заранее благодарен
Я могу сказать одно: нужно поюзать POSIX-совместимый заголовочный файл <string.h>. Как в Windows, так и в *NIX-ах заголовочный имеет однотипный формат. Например имеем следующее:
Код:
Если у вас имеется ненумерованный список, типа множества строк: char *String1, *String2,...
тогда не обойтись без двойного указателя на массив этих строк. Например, char **AllStrings;
Но логика работы с конструкциями такого типа на порядок запутаннее чем работа с указателями.
Цитата:
Originally posted by Elf
Сорри, обознался.:roll: Все равно они в ANSI C не входят, как впрочем и функция strsep. Правда последняя все же более переносима. Я где-то видел переделанный scanf специально обученный для разбора всего чего угодно. Но не помню где. Проще самому написать, потом кайфовать.
Сорри, обознался.:roll: Все равно они в ANSI C не входят, как впрочем и функция strsep. Правда последняя все же более переносима. Я где-то видел переделанный scanf специально обученный для разбора всего чего угодно. Но не помню где. Проще самому написать, потом кайфовать.
А может быть имеет смысл воспользоваться функцией sscanf() ?
Например так:
Код:
...
char *TextString;
int Value;
...
//Предположим, что TextString указатель на
//строку, которая содержит какое-то число,
//которое нам нужно поиметь в виде int
sscanf(&TextString, "hu", Value);
...
char *TextString;
int Value;
...
//Предположим, что TextString указатель на
//строку, которая содержит какое-то число,
//которое нам нужно поиметь в виде int
sscanf(&TextString, "hu", Value);
...
Причем у sscanf множество флажков (типа "hu" - это int) под самые различные типы данных. Смотрите help на эту функцию.
Иными словами, вам нужна функция с переменным числом параметров... я могу предоставить пример написания этой функции с разбором параметров... правда, не сейчас... :{ домой ещё надо сходить... =)
ссылку ... возможно, это поможет...
нашёл любопытную