Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

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 не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...