Назад, на главную

 

Здесь приведены функции для обработки строк. Аналоги для некоторых имеются в стандартных библиотеках языка С.

Скачать исходники (.h , .c), а также библиотеку (.lib).

 

           unsigned int lenstr(char * str)

            Вычисляет длину строки (без учета конечного нулевого байта) и возвращает ее.

            str - адрес строки

 

 

            int power0(int x,int n)

            Вычисление x в степени n. Возвращается результат.

            x - число, возводимое в степень.

            n - степень (должно быть больше или равно 0).

 

 

            void INTtoSTR(int n,char * str)

            Преобразует целое число (положительное) в строку.

            n - преобразуемое число.

            str - адрес строки.

 

 

            int best_ecvt(char * ss,char * ss1,int dec1,int sign1)

            Преобразует действительное число из строки, полученной в результате действия функции ecvt в строку со знаком и точкой.

            Предупреждение - dec1 не должно превышать 15, иначе будет неправильный результат (15 - это как раз число значащих цифр в типе double).

            Возвращает 0, если все хорошо, и 1, в случае неправильного результата (dec1 больше 15).

            ss - по этому адресу исходная строка, полученная в результате действия ecvt.

            ss1 - адрес результата.

            dec1 - число десятичных цифр перед запятой (т.е.точкой) - из ecvt.

            sign1 - если 0 - число положительное, 1 - отрицательное (берется в результате работы ecvt).

            Примерный фрагмент программы таков:

                        int dec,sign;

                        double a;

                        char s[30];

                        ...........

                        getstrnum_p(29,s,0,8,80,25,15,0);

                        a=atof(s);

                        s1=ecvt(a,15,&dec,&sign);

                        best_ecvt(s1,s2,dec,sign);

                        printstr(29,s2,0,15,80,25,15,0);

 

 

            int testnum_p(char *ss)

            Проверяет,соответствует ли  строка действительному числу (+ или - или ничего в начале, только 1 точка, причем не вначале, остальные - цифры.

            Если возвращает 0 , значит все хорошо, если 1 - строка неправильная.

            ss - указатель на строку.

 

 

void app0(char *ss,char *ss1)

            Добавление нулей после точки (до двух):

                        2 --- 2.00

2.0 --- 2.00

3.00 --- 3.00

            ss - адрес начальной строки.

            ss1 - адрес результата.

 

 

          int testnum_m(char *ss,unsigned char after)

            Проверяет,соответствует ли  строка действительному числу с определенным количеством знаков после запятой.

            Если возвращает 0 , значит все хорошо, если 1 - строка неправильная.

            ss - указатель на строку.

            after - число знаков после запятой.

 

 

          int testnum_l(char *ss)

            Проверяет,соответствует ли  строка целому числу.

            Если возвращает 0 , значит все хорошо, если 1 - строка неправильная.

            ss - указатель на строку.

 

 

long datetolong(char *s,int year0)

            Вычисляет число полных суток, прошедших с начала года year0 по настоящее время. Не совсем верно учитывает високосные года (все годы, кратные 4-м, считаются високосными), поэтому пользоваться ей нужно с осторожностью, не захватывая годы, кратные 100 (впрочем, если нужно лишь узнать, какая дата раньше, а какая позже, то пользоваться можно смело).

            s - строка с датой в формате число-месяц-год (под число и месяц - по 2 знака, под год - 4 знака, между ними - разделители, всего в строке - 11 знаков, включая нуль-терминатор).

            year0 - год, от начала которого производится счет суток.

 

 

int ROUND(char *s,char *dest,int n)

            Округляет действительное число, представленное в виде строки s (в начале строки может стоять знак плюс или минус, дробные разряды отделены точкой) до n знаков после запятой (то-есть после точки) и записывает округленное число в строку dest.

            Возвращает -1, если n<0.

                                2, если точка не найдена.

1- если число знаков после запятой меньше или равно n.

                                0 - если округление проведено.

            Если число знаков после запятой меньше или равно n, то строка дополняется нулями, чтоб количество знаков после запятой составило n.

            s - строка-источник.

            dest - сюда помещается результат.

            n - число знаков после запятой, которое должно остаться.

 

 

int Del0Last(char *s)

            Выкидывает последние нули после запятой (вернее после точки) в действительном числе, записанном в виде строки, а также, если нужно, и саму точку.

            Возвращает 0, если убраны нули (и точка, если надо).

            1- если точки нет.

            s - строка с числом, которая подвергается обработке (т.е. изменению).

 

 

int COMPstr(char *s1,char *s2)

            Сравнение 2-х строк. Если строки одинаковы, возвращается 0. Если 1-я строка «меньше» 2-й (скажем, начальные буквы стоят раньше по алфавиту), возвращается 1. Если же 1-я строка  «больше»,

возвращает (-1).

            s1 - 1-я строка.

            s2 - 2-я строка.

 

            int COMPne(char *s1,char *s2,int kr)

            Сравнение 2-х строк с точностью до kr символов. Если длины строк совпадают, но меньше, чем kr символов отличаются, возвращается ноль. Если длины различаются, возвращается (-1). В оставшихся случаях - (-2).

            s1 - 1-я строка.

            s2 - 2-я строка.

            kr - число различающихся символов, начиная с которого строки считаются разными.

 

            int Substr(char *s1,char *s2,int k,int m)

            Выделить из 2-й строки (s2) подстроку (s1) длиной k (то-есть содержащую k символов, не считая нулевого), начиная с позиции m во 2-й строке.

            s1 - сюда запишется подстрока (k+1 байт).

            s2 - отсюда будут выбираться символы подстроки.

            k - число выбираемых символов.

            m - позиция, начиная с которой будут выбираться символы.

 

            void ToHIGH(unsigned char *s1,unsigned char *s2)

            Преобразует все буквы 1-й строки в заглавные и записывает измененную строку по адресу s2.

            s1 - отсюда берутся символы.

            s2 - сюда записываются измененные символы.

 

            void ToHIGH1(unsigned char *s1)

            Преобразует все буквы 1-й строки в заглавные и записывает их по тому же адресу.

            s1- адрес строки.

 

 

long FindStr(char *filename,char *end,char *dest,long k,long beg)

Выделяет из файла (начиная со смещения beg) строку, заканчивающуюся набором символов end и записывает ее в
в dest (без набора end).

Возвращает смещение символа в файле, следующего за концевым набором. В случае ошибки возвращается отрицательное число.

-4 - не удалось открыть файл.

-5 - не удалось выставить указатель в файле на нужное место.

-2 - строка длинней k.

-1 - встретился конец файла.

            filename - название файла.

            end - в этой строке - комбинация символов, служащая концом строки в рассматриваемом файле.

            dest - сюда будет помещен результат. После l символов в строку будет записан завершающий нуль.

            k - максимальная длина строки, если будет обнаружена строка большей длины, функция прекратит работу.

beg - смещение в файле, откуда начнется считывание.

 

char FindStrN(char *filename,char *end,char *dest,long k,long N)

Ищет в файле строку с номером N (нумерация строк начинается с 1, строка должна заканчиваться на шаблон end).

Возвращает 0 в случае успеха, 1 - если строка с номером N оказалась последней строкой и не закончилась шаблоном end, то-есть уперлась в конец файла. Возвращается отрицательное число в случае ошибки (в частности, если строка с таким номером не найдена).

Функция начинает просмотр файла с самого начала, поэтому использовать ее в цикле при изменении N не рекомендуется (чтоб избежать потерь времени).

            filename - название файла.

            end - в этой строке - комбинация символов, служащая концом строки в рассматриваемом файле.

            dest - сюда будет помещен результат (без оканчивающего строку в файле набора).

            k - максимальная длина строки, если будет обнаружена строка большей длины, функция прекратит работу (и возвратит -2).

            N - номер строки, которую мы ищем.

 

int UpSpace(char *s,char cmin,char cmax,char sp)

Просматривает строку. Если находит байты (символы) cmin<...<cmax, заменяет их на символ sp.

Возвращает число байтов в строке (включая завершающий нулевой).

s - адрес строки.

cmin - нижняя граница заменяемых символов.

cmax - верхняя граница заменяемых символов.

sp - заменяющий символ.

 

int DelSpace(char *s,char sp)

Если строка начинается с символа sp (или нескольких), функция выкидывает их.

Возвращает число выкинутых символов.

s - адрес строки.

sp - вырезаемый символ.

 

 

int DelSpaceLast(char *s,char sp)

Обрезает последние байта sp.

Возвращает число выкинутых символов.

s - адрес строки.

sp - вырезаемый символ.

 

int DelSpaceAll(char *s,char *dest,char sp)

Помещает в dest строку s, вырезая все байты sp.

Возвращает число байт в dest (включая 0).

s - адрес исходной строки.

dest - сюда помещается результат.

sp - вырезаемый символ.

 

int CpStr(char *s,char *dest)

Копирует s в dest.

Возвращает число байт, включая 0 (завершающий строку символ).

s - адрес исходной строки.

dest - адрес строки-получателя.

 

int StrCat(char *s,char *dest)

Дописывает строку s в конец строки dest. Возвращает получившиеся количество байт в dest. Строка dest заканчивается нулевым байтом.

s - адрес исходной строки.

dest - адрес строки-получателя.

 

int CpStrN(char *s,char *dest,int N)

Копирует первые N байт из s в dest. Если встретит 0 (завершающий строку s символ), копирование прекращается.

Возвращает число реально скопированных байт.

s - адрес исходной строки.

dest - адрес строки-получателя.

N - максимальное число байт, которое нужно скопировать.

 

int CpStrN1(char *s,char *dest,int N)

Копирует первые N байт из массива s в массив dest, несмотря на возможное наличие завершающего нуля в s. Массив dest завершается нулем.

s - адрес исходной строки.

dest - адрес строки-получателя.

N - число байт, которое нужно скопировать.

 

 

int CpStrNLast(char *s,char *dest,int N)

Копирует остаток строки s (после смещения N) в строку dest.

Возвращает число скопированных в dest байт.

s - адрес исходной строки.

dest - адрес строки-получателя.

N - смещение в строке s, после которого идет копирование.

 

 

int CpSubStr(char *s,char *dest,int N1,int N2)

Копирует байты из s в dest, начиная со смещения N1 и заканчивая смещением N2.

Возвращает число реально скопированных байт.

s - адрес исходной строки.

dest - адрес строки-получателя.

N1 - смещение первого скопированного символа (то-есть номер в массиве, причем нумерация начинается с нуля).

N2 - смещение первого нескопированного символа, следующего за скопированными.

 

int CpStrFull(char *s,char *dest,int N,char ch)

Копирует N байт из строки s в строку dest, причем если в s количество байт (не считая нулевой завершающий байт) меньше, чем N, в конец dest добавляются символы ch (чтоб всего в строку dest было записано N байт).

Возвращается число знаков ch, записанных в dest.

s - адрес исходной строки.

dest - адрес строки-получателя.

N - полное число символов, скопированных в строку dest.

ch - символ, добавляемый в конец строки dest, если строка s достаточно коротка (добавляются перед завершающим нулем).

 

 

 

int InsSubStr(char *s,char *s1,char *dest,int N1,int N2,int N3)

Копирует в строку dest часть строки s (до смещения N1), потом строку s1, потом опять s (начиная со смещения N2).

Если в s больше символов, чем N3 (не считая завершающего нуля), то копирование оборвется.

Возвращает число скопированных в dest байт.

s - 1-я исходная строка.

s1 - 2-я исходная строка.

dest - адрес строки-получателя.

N1 - смещение, до которого копируется 1-я часть строки s.

N2 - смещение, начиная с которого копируется 2-я часть s.

N3 - максимальное количество символов в s.

 

int ReplSubStr(char *s,char *s1,char *dest,int N1,int N3)

То же, что и функция InsSubStr, но N2 вычисляется автоматически и поэтому не входит в число параметров:

         N2=N1+(количество символов в s1)

 

int DispChar(char *s,char ch,int N1)

Начиная со смещения N1 ищет в строке s символ ch.

Возвращает:

-3 - если N1<0.

-2 - если N1>(длина строки).

-1 - символ найден.

Смещение символа, если он найден.

s - адрес строки.

ch - код символа, который мы ищем в строке.

N1 - смещение, начиная с которого мы его ищем.

 

int DispChar1(char *s,char ch,int N1)

            Ищет в строке s символ ch, начиная со смещения N1(ищется первое вхождение символа). Если находит, то возвращает смещение символа от начала строки (а не от N1). Если же не находит, то возвращает -1.

            Возвращает -3 - если N1<0.

            -2 - слишком большое значение N1 (больше длины строки).

 

            int DispCharLast1(char *s,char ch,int N1)

            Ищет в строке s последнее вхождение символа ch и  возвращает смещение символа от начала строки. Если же не находит, то возвращает -1.

            Символ ищется при смещении в строке от 0 до N1. Если N1<0, то поиск идет по всей строке.

 

            int DispCharLast(char *s,char ch,int N1)

            Ищет в строке s, начиная со смещения N1, последнее вхождение символа ch и  возвращает смещение символа не от начала строки, а от N1. Если же не находит, то возвращает -1.

            Символ ищется при смещении в строке от 0 до N1. Если N1<0, то поиск идет по всей строке.

            Возвращает -3 - если N1<0.

            -2 - слишком большое значение N1 (больше длины строки).

 

 

int InversStr(char *s,char *dest)

Помещает в dest перевернутую строку s.

 

int InsertChs(char *s,char *dest,char ch,int N1,int L)

Копирует строку s в dest, вставляя в нее, начиная со смещения N1, символы ch с промежутком в L. Символы строки при этом раздвигаются.

Возвращает число байт в массиве dest.

 

int CpWord(char *s,char *dest,char sp,int N)

Начиная со смещения N ищет в строке s слово, разделителями для которого служат символы sp. Слово копируется в dest.

Возвращает:

-2 - если N>(количество символов в s).

0 - если слово в dest пустое.

Позиция в строке s после найденного слова, если все нормально (т.е. найдено не пустое слово).

sp - символ - разделитель.

N - смещение, начиная с которого ищется слово.

 

int CpWordN(char *s,char *dest,char sp,int N)

Ищет в строке s N-е слово (нумерация начинается с 1), разделителями служат символы sp. Найденное слово записывается в dest.

Возвращает:

-2 - если пытаемся узнать 0-е слово.

-1 - если слово не найдено.

0 - если найдено.

sp - символ - разделитель.

N - номер слова (начиная с единицы).

 

int CpWord1(char *s,char *dest,char sp,int N)

Копирует из s в dest слово, начиная со смещения N в s. Первые вхождения знака sp включаются в слово (т.е. считаются частью слова). Лишь вхождение sp после какого-нибудь отличного от sp знака служит разделителем. Возвращается позиция не следующая после слова, а следующая после sp-разделителя.

sp - символ - разделитель.

N - смещение, начиная с которого ищется слово.

 

int CpWord1N(char *s,char *dest,char sp,int N)

Помещает в dest N-е слово, выделенное в s по принципу, данному в описании предыдущей функции.

sp - символ - разделитель.

N - номер слова (начиная с единицы).


 

int CpWord0(char *s,char *dest,char sp,int N)

Тоже копирует из s в dest слово (начиная со смещения N в s). Но принцип выделения слова опять несколько другой. Если первый знак - sp, то значит слово - нулевое.

sp - символ - разделитель.

N - смещение, начиная с которого ищется слово.

 

int CpWord0N(char *s,char *dest,char sp,int N)

Помещает в dest N-е слово, выделенное в s по принципу, данному в описании предыдущей функции.

sp - символ - разделитель.

N - номер слова (начиная с единицы).

 

int WrStr(char *filename,char *end,char *s,char k)

Записывает в конец файла строку s (если файла нет, то он создается). Строка заканчивается содержимым массива end, если k не равно 0, если же k=0, то содержимое end не дописывается.

Возвращает

-4 - если не открыт файл.

-1 - если неудачно закончилась запись символа.

Число записанных в файл символов, если все нормально.

filename - имя файла.

end - шаблон конца строки.

s - строка с исходной информацией, которую мызаписываем в файл.

k - индикатор записи окончания строки.

 

int WrErStr(char *filename,char *end,char *s,char k)

Тоже самое, что и предыдущая функция, только прежнее содержимое файла стирается.

filename - имя файла.

end - шаблон конца строки.

s - строка с исходной информацией, которую мызаписываем в файл.

k - индикатор записи окончания строки.

 

char SearchStrN(char *filename1,char *filename2,char *end,char *s,long k,char sp,int N)

Читает строки файла filename1, в каждой строке находит N-е слово, сравнивает его с содержимым строки s, и, если они совпадают, записывает всю строку (а не только слово) в файл filename2.

Если все в порядке, возвращается ноль (не было ошибок).

filename1 - файл, откуда берутся строки для сравнения с s.

filename2 - файл, куда записываются строки, совпадающие с s.

end - шаблон конца строки.

s - строка, с которой сравниваются строки из первого файла.

k - длина строки в файле должна быть меньше (или равна) этого числа, иначе будет ошибка.

sp - знак-разделитель для слов.

N - номер сравниваемого слова.

 

 

long CountStr(char *filename,char *end,int k)

Считает строки в файле и возвращает их число.

Если какая-либо ошибка, возвращается отрицательное число.

Длина строки должна быть меньше k (или равна), иначе будет ошибка.

filename - имя файла.

end - шаблон конца строки.

k - длина строки в файле должна быть меньше (или равна) этого числа, иначе будет ошибка.

 

 

int SearchOnFrag(char *s,char *frag)

Если в строку s входит фрагмент frag, то возвращается смещение фрагмента (число больше нуля), вернее смещение первого вхождения фрагмента в строку. Иначе - (-1).

s - адрес строки, где ищется фрагмент.

frag - адрес фрагмента (т.е. шаблона для поиска).

 

int SearchOnFrag1(char *s,char *frag)

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

 

char SearchStrOnFrag(char *filename1,char *filename2,char *end,char *frag,long k,char h)

Просматривается первый файл, в каждой строке ищется фрагмент frag (если h=0, то учитывается размер букв, если h не равно нулю, буквы преобразуются к заглавным). Строки, где найден фрагмент, записываются в файл 2. k - максимальная длина обрабатываемой строки.

 

 

 

int CpStrN1(char *s,char *dest,int N)

Копирует первые N байт из массива s в массив dest, несмотря на возможное наличие завершающего нуля в s. Массив dest завершается нулем.

s - адрес исходной строки.

dest - адрес строки-получателя.

N - число байт, которое нужно скопировать.

 

 

int CpStrN2(char *s,char *dest,int N)

Копирует первые N байт из массива s в массив dest, несмотря на возможное наличие завершающего нуля в s. Массив dest НЕ завершается нулем.

s - адрес исходной строки.

dest - адрес строки-получателя.

N - число байт, которое нужно скопировать.

 

 

 

int COMPstrN(char *s1,char *s2,int N)

            Сравнение 2-х строк как массивов длины N (т.е. на завершающие нули внимание не обращается). Если строки одинаковы, возвращается 0. Если 1-я строка «меньше» 2-й (скажем, начальные буквы стоят раньше по алфавиту), возвращается 1. Если же 1-я строка  «больше»,

возвращает (-1).

            s1 - 1-я строка.

            s2 - 2-я строка.

            N - длина массива.

 

int COMPstrF(char *s1,char *s2)

            Сравнение 2-х строк как имен файлов (сперва сравниваются окончания после точки, а потом те части имен, что перед точкой). Если строки одинаковы, возвращается 0. Если 1-я строка «меньше» 2-й, возвращается 1. Если же 1-я строка  «больше»,

возвращает (-1).

            s1 - 1-я строка.

            s2 - 2-я строка.

 

 

int CountChars(char *s,char ch)

            Считает символы в строке и возвращает их количество.

            s - адрес строки.

            ch - считаемый символ.

 

 

int CpStrMul(char *s,char *dest,char ch,int N)

            Строка s записывается в строку dest, но при этом каждый символ ch повторяется N раз.

 

 

 

int Repl(char *s,char *frag,char *frag1,char *dest)

            Переписывает строку s  в строку dest, заменяя все найденные фрагменты frag на frag1. Возвращает число замен.

 

 

void MakeStrCh(char *S,int N,char ch)

            Записывает в строку по адресу S N байт ch и после этого заканчивает строку нулевым байтом.

            S - адрес строки, куда пойдет запись.

            N - число запмсываемых байт.

            ch - записываемый байт.

 

            void MakeStrChToZ(char *S,char ch)

            Записывает в строку по адресу S байты ch до того, как встретит завешающий нулевой байт.

            S - адрес строки, куда пойдет запись.

            ch - записываемый байт.

 

            void MakeStrChWZ(char *S,int N,char ch)

            Записывает в строку по адресу S N байт ch. Строку нулевым байтом не заканчивает.

            S - адрес строки, куда пойдет запись.

            N - число запмсываемых байт.

            ch - записываемый байт.

 

void MakeStrChWZToZ(char *S,int N,char ch)

            Записывает в строку по адресу S N байт ch. Строку нулевым байтом не заканчивает. Но если в строке встретится нулевой байт, запись символов в строку прекращается.

            S - адрес строки, куда пойдет запись.

            N - число записываемых байт.

            ch - записываемый байт.

 

 

int StrCat1(char *s,char *dest)

Дописывает строку s в конец строки dest. Возвращает получившиеся количество байт в dest. Строка dest заканчивается нулевым байтом.

s - адрес исходной строки.

dest - адрес строки-получателя

 

 

char testFILE(char *fname)

            Открывает файл для чтения и закрывает его, для того, чтобы проверить, есть ли он. Возвращает -1, если файл не найден и 0, если найден.

 

 

int GetSec(void)

            Возвращает секунды текущего местного времени.

 

            int GetMin(void)

            Возвращает минуты текущего местного времени.

 

            int GetHour(void)

            Возвращает часы текущего местного времени.

 

            int GetMday(void)

            Возвращает число.

 

            int GetMon(void)

            Возвращает номер месяца (январь - 1).

 

            int GetYear(void)

            Возвращает год.

 

 

          void GetDateNow(char *S,char ch)

            Записывает дату по адресу S, под число - 2 знака (если число однозначное - то первый символ - ноль, т.е. знак с кодом 48), под месяц - 2 знака, под год - 4 знака (всегда, ведь год в обозримом будущем будет 4-значным). Разделитель - ch.

 

void GetTimeNow(char *S,char ch)

            Записывает текущее местное время по адресу S, под часы - 2 знака (если число часов однозначное - то первый символ - ноль, т.е. знак с кодом 48), под минуты - 2 знака, под секунды - 2 знака. Разделитель - ch.

 

 

 

 

 

 

 

Хостинг от uCoz