|
|||||
Таблица ASCII кодов, применяемая в системе программирования ⇐ ПредыдущаяСтр 5 из 5 Таблица ASCII кодов, применяемая в системе программирования Borland C++ 3.1 for DOS
Назад 1.8 Сцепление двух строк (конкатенация)
Функция strcat(s1,s2) присоединяет строку s2 в конец строки s1 и возвращает указатель на строку, совпадающий с первым аргументом. При этом сначала из строки s1 удаляется завершающий нуль-символ. В конце новой строки S1 помещается '\0'. Программист должен сам обеспечить достаточную длину строки s1. Примеры. 1) char s1[40]="Скоро Новый Год!"; char s2[]="Скоро первая сессия!"; printf(" %s\n",strcat(s1,s2)); Будет получена строка: Скоро Новый Год! Скоро первая сессия! 2) Вторым параметром является текстовая константа: char s3[50]="Успешной сдачи"; printf("%s\n\t%s\n",strcat (s3," 1-ой сессии!!!",s3)); Будет получено две строки:
Успешной сдачи 1-ой сессии!!! Успешной сдачи 1-ой сессии!!!
3) char s4[35]="Успехов и здоровья"; char s5[]=" в Новом Году!"; char *p; p=strcat(s4, s5); pintf("%s\n%s\n",s4,p);
Будет получено две строки:
Успехов и здоровья в Новом Году! Успехов и здоровья в Новом Году! Функция strncat(s1,s2,n) присоединяет n символов строки, на начало которой указывает s2, в конец строки, на начало которой указывает s1 и возвращает указатель на строку, совпадающий с первым аргументом. Сформированная строка s1 ограничивается '\0'. Если n больше длины строки s2, то выполняется постая конкатенация. Если длина строки s2 меньше n, то все сиволы s2 присоединяются к строке s1. 1.9 Определение позиции первого вхождения символа из заданного набора символов Функция strcspn(s1,s2) сопоставляет каждый символ строки s1 со всеми символами строки, на начало которой указывает s2, и возвращает позицию первого вхождения символа строки s2 в строке s1. Символ '0' в сравнении не участвует. Если строка s1 начинается с символа, встречающегося в строке s2, то функция возврвщает значение нуль. Если строка s1 не содержит ни одного символа строки s2, то возвращаемое функцией значение совпадает с длиной строки s1. Примеры.
printf("%d %d %d\n", strcspn("asdf", "hjyars"), //s1начанается с 'a' strcspn("asdf", "ghtdu"), //в s1 'd' в позиции № 2 strcspn("asrt", "hj")); // в s1 не символов s2 Получим: 0 2 4 Здесь 0 и 2 – позиции в строке s1, 4 – длина строки s1.
1.10 Cравнение двух строк
Сравнение строк производится посимвольно слева направо. Большей считается та строка, в которой первый несовпадающий символ имеет больший код в кодовой таблице. Функция strcmp(s1,s2) сравнивает строки s1 и s2 . Возвращает отрицательное значение, если s1<s2, нулевое, если s1=s2 или положительное значение, если s1>s2. Функция strncmp(s1,s2, n) сравнивает строку s1 и первые n символов строки s2 . Возвращает отрицательное значение, если s1<s2, нулевое, если s1=s2 или положительное значение, если s1>s2.
Пример. Ввести две строки. Вывести их в лексикографическом порядке.
#include<stdio.h> #include<string.h> #include<conio.h> void main() { char s1[20]; char s2[20]; puts("Введите 1-ую строку "); gets(s1); puts("Введите 2-ую строку "); gets(s2); if(strcmp(s1,s2)<0) {puts(s1); puts(s2);} else if(strcmp(s1,s2)>0) {puts(s2); puts(s1);} else puts("Строки совпадают"); getch(); }
Результаты выполнения программы: Введите 1-ую строку abcdefg Введите 2-ую строку abcdefg Строки совпадают
Введите 1-ую строку bcdert Введите 2-ую строку bccertyu bccertyu bcdert
Введите 1-ую строку rtyu Введите 2-ую строку rtdh rtdh rtyu Пример. Сколько раз построка s1 содержится в строке s?
#include<stdio.h> #include<string.h> #include<conio.h> void main() { char s[20]; char s1[20]; puts("Введите строку "); gets(s); puts("Введите подстроку "); gets(s1); int k=0,i=0; char *p=s; int n=strlen(s1); printf("n=%d %c\n",n,*p); while(strstr(p,s1) && i<n) { k=k+1; p=p+n+1; printf("%c\n",*p); } puts("В строке:"); puts(s); printf("%d раз встречается %s\n",k,s1); getch();
}
Эта же задача с использованием srtcmp
/*Сколько раз подстрока s1 встречается в строке s? */ #include<stdio.h> #include<string.h> #include<conio.h> void main() { char s[20]; char s1[20]; puts("Введите строку "); gets(s); puts("Введите подстроку "); gets(s1); int k=0,i=0; int m=strlen(s); int n=strlen(s1); printf("m=%d n=%d\n",m,n); while(i<m) { if(strncmp(s1,&s[i],n)==0) { k=k+1; i=i+n; } else i=i+1; } puts("В строке:"); puts(s); printf("%d раз(а) встречается %s\n",k,s1); getch();
}
|
|||||
|