Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Функции для работы со строками.




Для работы со строками в языке С есть специальные функции, которые описаны в библиотечном файле string.h. Наиболее часто используются следующие функции.

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

k =strlen(s)

2. strcat(s1,s2) - производит соединение двух строковых переменных s1 и s2, при этом s2 присоединяется в конец s1.

char str1 [10 ]=” adcdef”;

*str2 = “nijk”;

strcat(str1,str2); str1 =”abcdefnijk”

3.strncat (s1,s2, n) – соединяет n литер из строки s2 с s1.

4. strcmp (s1,s2)- производит сравнение двух строк s1 и s2. При сравнении происходит посимвольное вычитание кодов символов. Сравнение выполняется до первого появления неравных символов.

strcmp(“AAA”,”AAA”) 0

strcmp(“AAB”,”AAA”) 1

strcmp(“AAA”,”AAB”) -1

5. strncmp(s1,s2,n)- производит сравнение n начальных символов двух строк s1 и s2.

6.strcpy(s1,s2) - выполняет копирование строки s2 в строку s1 и возвращает строку s1.

7.strncpy(s1,s2,n) - выполняет копирование n символов строки s2 в строку s1 и возвращает строку s1.

8.strchr (s,с) - возвращает указатель на первый встреченный в строке s символ с. Если такого символа в строке не оказалось, возвращает NULL.

9.strrchr (s,c) - возвращает указатель на последний встреченный в строке s символ с.

10.strstr(s1,s2) возвращает указатель на первое вхождение s2 в s1.

11.strtok(s1, z)- разбивает строку на отдельные лексемы, разделенные знаками строки z.

Пример 7.1 В качестве примера рассмотрим несколько простых задач по обработке строковых данных. Одна из строковых переменных описана как массив символов (char t[160]), а вторая с помощью указателя на символьный тип как строку (char *tt). При решении задач используется индексное обращение к каждому символу строки.

void main()

{int i,j,l,n=0;

char t[160]=" фірма виконує ремонт комп'ютерів";

char *tt=" усі аудіторії у цей час зайняті";

/* 1 */ Порахувати кількість букв м

l=strlen(t);

for(i=0;i<l;i++)

if(t[i]=='м') n++;

printf("%d\n",n);

 

/*2 */ Замінити м на +

for(i=0;i<l;i++)

if(t[i]=='м') t[i]='+';

printf("%s\n",t);

 

/*3*/ Уставити перед м +

for(i=0;i<=l;i++)

if(t[i]=='м')

{for(j=l;j>i;j--)

t[j]=t[j-1];

t[i]='+';i=i+1;}

puts(t);

 

/*4*/ Порахувати кількість букв м

n=0; for(i=0;i<l;i++)

if(*(tt+i)=='м') n++;

printf("%d\n",n);

 

/*5*/ Видалити м

l=strlen(tt);

for(i=l-1;i>=0;i--)

{if(*(tt+i)=='м')

{for(j=i;j<l-1;j++)

*(tt+j)=*(tt+j+1);}};

puts(tt);

Пример 7.2 Задана строка. Предполагается, что в ней могут быть подряд идущие одинаковые символы. Удалить их, оставив по одному из таких символов.

void main()

{

int i,n=0,j,k,l;

char f[30];

printf("Введите строку ");

gets(f); \\Ввод строки

printf("%s",f); \\вывод исходной строки на экран

l=strlen(f);\\ определение длины сроки

for(j=l-1;j>=0;j--)

if(f[j]==f[j+1])\\ сравнение двух соседних символов

{

n++;\\подсчет количества удаленных символов

for(k=j; k<l-1;k++) f[k]=f[k+1];\\удаление символа

}

i=l-n;

f[i]='\0';\\завершение строки

printf("\nn=%d \nstr=%s",n,f);

}

 

Пример 7.3 Задана строка. Найти самое длинное слово и заменить его *.

void main()

{

int i,l,ksl,nsl,max=0,dlsl, nmax,kmax;

char *a="текст исходной строки";

printf("исходная строка= %s\n",a);

nsl=0;

l=strlen(a);

for(i=0; i<l; i++)

if (a[i]==' ')

{

ksl=i-1; dlsl=ksl-nsl+1;

if (dlsl>max) {max=dlsl;nmax=nsl; kmax=ksl;}

nsl=i+1;

}

printf("нач_символ= %d кон_символ=%d длина=%d\n",

nmax, kmax,max);

printf("\слово= ");

for(i=nmax; i<=kmax; i++) printf("%c",a[i]);

for(i=nmax; i<=kmax; i++) a[i]='*';

printf("\n результирующая строка= %s\n",a);

getch();

}

 

Пример 7.3 Задана строка. Определить количество пробелов.

void main()

{

int n=0;

char *b="программа не должна содержать ошибок";

char *p;\\дополнительный указатель

p=b; \\p указывает на туже строку, что и b

p=strchr(p,' ');\\определение положения первого пробела

while(p)\\ цикл до конца строки

{

p++;\\ смещение указателя на одну позицию

n++;\\подсчет количества пробелов

p=strchr(p,' ');

}

printf(" \n\nn= %d \n",n);

}

 

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

int main(void)

{

char *input="Весна. Солнце греет, временами дождь.";

char *p;//дополнительный указатель

char *z=",.";//строка с возможными разделителями

int k=1;

p = strtok(input, z);//выделение первого слова

if (p) printf("%d %s\n",k, p);

do// цикл до конца строки

{

p = strtok(NULL, z);// выделение очередного слова

if (p)

{ k++; printf("%d %s\n",k, p);}

}

while(p);

getch();

}





Поделиться с друзьями:


Дата добавления: 2017-02-11; Мы поможем в написании ваших работ!; просмотров: 310 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Самообман может довести до саморазрушения. © Неизвестно
==> читать все изречения...

2489 - | 2332 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.012 с.