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-05; просмотров: 332; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!