Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Cцепление (конкатенация)строк
char *srtcat(char *s1,char *s2) Добавляет значение s2 к строке s1 и результат в строка - s1. Возвращает строку s1. gets(s1); //123 gets(s2); //456 char * s4=strcat(s1,s2); puts(s1); //123456 puts(s4); //123456
Поиск символа в строке. char *strchar(char *s1,int ch) – Возвращает строку - указатель на первое вхождение символа ch в строке s1 или NULL если символа нет. char s4[256]=”SDFGHJAKLU”; char *k=strchr(s4,'A'); //результат - текст начинающийся с буквы А if (k= =NULL) cout<<"Нет символа в строке"; else puts(k); Тест: s4=qwAfgh K=Afgh Копирование строк (присваивание) char *s1=”AAAAA”; char *s2=”BBBB”; char * strcpy(char *s1,char *s2) копирует строку s2 в s1 – результат s1 и возвращает указатель на строку s1. char *strncpy(char *s1,char *s2, int n) –копирует первые n символов строки s2 в s1 – результат s1. Если в строке s1 количество символов больше или равно n, то \0 в конец строки не вставляется, иначе строка заполняется \0 до n – ого символа. int _tmain(int argc, _TCHAR* argv[]) { char s1[]="AAAAA"; char s2[]="BBB"; char s3[10]; puts(strncpy(s1,s2,2)); //результат BBAAA puts(strncpy(s1,s2,5)); //результат BBB puts(strncpy(s1,s2,7)); //результат BBB puts(strncpy(s3,s2,2)); //результат на скриншоте puts(strncpy(s3,s2,10)); //результат на скриншоте return 0; }
1) Сравнение строк. Строки равны, если их длины равны и они посимвольно равны (“abc”==”abc”). Если длины строк равны, то из двух сравниваемых строк больше та, первый не совпавший символ которой имеет больший код: (“abd”>”abc”). Если длины не равны, то больше та, длина которой больше.
int strcmp(char *s1,char *s2) сравнивает значения строк s1 и s2 Результат: Если s1<s2 то результат - отрицательное число Если s1=s2 то результат равен 0 Если s1>s2 то результат – положительное число int strncmp(char *s1,char *s2,int n) сравнивает первые n символов строки s2 со строкой s1, результат аналогичен функции strcmp.
char s1[]="AAB"; char s2[]="AAA"; int flag=strcmp(s1,s2); // flag=1
char s1[]="AA"; char s2[]="AA"; int flag=strcmp(s1,s2); // flag=0
char s1[]="AA"; char s2[]="AAA"; int flag=strcmp(s1,s2); // flag=-1
Поиск подстроки в строке char *strstr(char *s1,char *s2) ищет первое вхождение строки s2 в s1. Возвращает(результат) строку - указатель на первый символ строки s1, если s2 вошла целиком в s1, или NULL в противном случае. сhar s1=”AAAAAABBBGBBBBAAAAAA”; сhar s2=”BB”; сhar *s=strstr(s1,s2); //результат- текст, начинающийся с ВВ if (s==NULL) puts("NOT");; else puts(s); //BBBGBBBBAAAAAA Выделение слов (лексем) из текста. сhar *strtok(char *s1,char *s2) s1 – строка с текстом; s2 – строка – символов разделителей слов в тексте; Функция возвращает указатель на слово в строке s1, после которого стоит один из символов строки s2 и ставит \0 на место этого символа разделителя в s1. Пример 8.1. Вывести слово, которое отделено от другого одним из символов " ,.!" char s1[]="Мы учим, Си"; char s2[]=" ,.!"; char *s=strtok(s1,s2); if(s==NULL) cout<<”Нет разделителей”; else puts(s); //вывод Мы Пример 8.2 Вывод всех слов текста char s1[]="Мы учим, Си"; char s2[]=" ,.!"; char *s=strtok(s1,s2); //указатель на первое слово while (s!=NULL) { puts(s); s=strtok(NULL,s2); //указатель на слово между \0 и символом разделителем
}
Пример 8.3. Сформировать массив слов заданного предложения. Считать, то в тексте не более 10 слов. { char s1[1024]; char *s2[10]; массив из 10 указателей char s3[]=" ,.!?"; int i=0; gets(s1); s2[0]=strtok(s1,s3); while(s2[i]!=NULL) { puts(s2[i]); s2[++i]=strtok(NULL,s3); } } Пример 8.4. Формирование динамического массива слов – открытого массива. Дано предложение. Сформировать массив из слов – чисел.
#include "stdafx.h" #include "string.h" #include "stdlib.h" #include "iostream" using namespace std; void create_mass_word(char *s,char *razd, char**&mas, int *k) { char *s1=strtok(s,razd); int value; char *ss=0;; //код завершения преобразования *k=0; mas=(char **)malloc(4);//создание массива из одного элемента mas[0]=ss; while(s1!=NULL) { puts(s1); value=(int)strtod(s1,&ss);//преобразование в числовой формат if(!(strcmp(ss,""))) //если выполнено преобразование ss пусто, //т.е.найдено число { if(*k) { mas=(char**)realloc(mas, ((*k)+1)*4); } mas[*k]=s1;(*k)++;
} s1=strtok(NULL,razd); }
} void out_massiv(int n, char **mas) { int i; for(i=0;i<n;i++) { puts(mas[i]); }
} int _tmain(int argc, _TCHAR* argv[]) { char str[1024]; char **mas=0; int l; char *razd=" ,.!?"; cout<<"Vvedite tekst"; gets(str); strcat(str," "); create_mass_word(str,razd, mas, &l); out_massiv(l,mas);
return 0; }
Пример 10. Дан текст, в котором есть группы повторяющихся символов. Сжать текст, заменив группы повторяющихся символов на строку (к) символ для к>4. Например:ASDFFFFFFFFhJJJJJJJkkLLLL #include "stdafx.h" #include "string.h"
int _tmain(int argc, _TCHAR* argv[]) { char s1[100]="ASDFFFFFFFFhJJJJJJJkkLLLL"; unsigned int i=0,i1; char str[5]; while(i<strlen(s1)) { i1=i; while(i<strlen(s1) && s1[i]==s1[i+1]) { i++; } int k=i-i1+1; //количество повторяющихся символов в группе if(k>=4) { s1[i1]='(';
while(k!=0) { s1[++i1]=(k%10+'0'); k=k/10; } s1[++i1]=')'; k=i-i1-1; //количество оставшихся в группе символов с самим символом // удаление оставшихся символов в повторяющейся группе // удаление оставшихся символов в // повторяющейся группе for(unsigned int i2=i1+1;i2<strlen(s1);i2++) { s1[i2]=s1[i2+k]; } i=i1+1; //корректировка i } i++; }
puts(s1); } Функции преобразования из строкового формата в числовой. |
||
Последнее изменение этой страницы: 2018-04-12; просмотров: 211. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |