Строка как массив символов. Использование функций поиска из библиотеки обработки строк

Страницы работы

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.

Фрагмент текста работы

  • результате на экран будут выведены еще три пустые строки, а символ ‘\n’ так и останется во входном потоке. Это символ надо удалить из потока путем вызова get без параметров.
  • Метод getline после прочтения строки не оставляет во входном потоке символ ‘\n’ , поэтому лучше пользоваться им.

10

Строки

  • Способы ввода/вывода строк :
    • С использованием функций ввода/вывода языка С
    • #include <stdio.h>
    • int main()
    • { const int n = 80;
    • char s[n];
    • gets(s); puts(s);
    • }
    • #include <stdio.h>
    • int main()
    • { const int n = 80;
    • int a; float b;
    • char s[n];
    • puts(" s : "); gets(s);
    • printf("a = "); scanf("%d",&a);
    • printf("b = "); scanf("%f",&b);
    • printf("%2d%25s%5.1f\n",a,s,b);
    • }

11

Строки

  • Очень удобный способ ввода-вывода строк – использование функций языка С gets и puts.
  • Вывод при помощи функции printf удобнее использовать в том случае, если в одном операторе требуется вывести данные различных типов. Если же работа выполняется только со строками, то следует использовать puts.

12

Строки

  • Основные библиотечные функции для обработки строк в стиле С ( объявлены в файле string.h).
    • unsigned strlen(char* s)
    • int *strcmp(char* s1, char* s2)
    • char *strchr(char* s, int ch)
    • char* strstr(char* s1 char* s2)
    • char* strcpy(char* s1, char* s2)
    • char* strcat(char* s1, char* s2)
    • char* strtok(char* s1, char* s2)

13

Строки

  • Использование функций копирования
  • #include <iostream>
  • #include <string.h>
    • using namespace std;
  • int main()
  • { char x[]= "The string C++"; char y[50],z[15];
  • cout << " x : " << x << endl;
  • cout << " y : " << strcpy(y,x) << endl;
  • strncpy(z,x,10); z[10] = '\0';
  • cout << " z : " << z << endl;
  • }

14

Строки

  • Функция strcpy(y,x ) – копирует строку х в y, включая завершающий нулевой символ.
  • Функция strncpy(z, x, n) – копирует не более чем n символов массива x в z.
  • Если x – это строка длиной меньше, чем n, то в z дописывается нулевой символ столько раз, сколько нужно, чтобы общее количество скопированных символов равнялось n.

15

Строки

  • Использование функций объединения строк
  • #include <iostream>
  • #include <string.h>
    • using namespace std;
  • int main()
  • { char s1[50]= "C++ "; char s2[] = "in samples and tasks";
  • char s3[50]=" ";
  • cout << "s1 = " << s1 << endl << "s2 = " << s2 << endl;
  • cout << "strcat(s1,s2) = " << strcat(s1,s2) << endl;
  • cout << "strncat(s3,s1,14) = " << strncat(s3,s1,14) << endl;
  • }

16

Строки

  • Функция strcat(s1,s2 ) – добавление копии строки s2, включая завершающий нулевой символ, в конец строки s1. Начальный символ строки s2 записывается поверх нулевого символа в конец строки s1.
  • Функция strncat(s1, s2, n) – добавляет не более чем n символов массива s2 в конец строки s1.

17

Строки

  • Сравнение строк
  • #include <iostream>
  • #include <string.h>
    • using namespace std;
  • int main()
  • {
  • cout << "\n Abc and Abc " << strcmp("Abc","Abc");
  • cout << "\n abc and Abc " << strcmp("abc","Abc");
  • cout << "\n abcd and abc " << strcmp("abcd","abc");
  • cout << "\n Abc and Abcd " << strcmp("Abc","Abcd");
  • cout << "\n abcd and abce " << strcmp("abcd","abce");
  • cout << "\n Abce and Abcd " << strncmp("Abce","Abcd",2);
  • cout << "\n Abc and abc " << stricmp("Abc","abc");
  • cout << "\n ABc and abd " << strnicmp("ABc","abd",2);
  • cout << endl;
  • }

18

Строки

  • Функция strcmp(s1,s2 ) – возвращает 0, если строки равны, отрицательное значение, если первая строка меньше, чем вторая, и положительное значение, если первая строка больше, чем вторая.
  • Функция strncmp(s1,s2 ) – используется для сравнения только первых n символов двух строк.
  • Функции stricmp(s1,s2 ) и strnicmp(s1,s2 ) используются для сравнения строк без учета регистра, т. е. без различия между прописными и строчными буквами.

19

Строки

  • Определение длины строки и разделение строки на лексемы (слова)
  • #include <iostream>
  • #include <string.h>
    • using namespace std;
  • int main()
  • { char string[]= "This sentence;has-5 words.";
  • char * tokenPtr;
  • cout << "\n string :" << endl << string;
  • cout << "\n length string :" << strlen(string);
  • cout << "\n words :" << endl;
  • tokenPtr = strtok(string, " ;-.");
  • while (tokenPtr != NULL)
  • { cout << tokenPtr << endl;
  • tokenPtr = strtok(NULL," ;-.");
  • }
  • }

20

Строки

  • Рассмотрим пример определения длины строки и разбиения строки на лексемы (слова).
  • Функция strlen() возвращает длину строки (без учета символа завершения строки).
  • Для разбиения строки на лексемы (слова) используется последовательность вызовов функции strtok () .
  • Функция strtok () возвращает из строки string следующую лексему, отделенную любым разделителем.
  • tokenPtr – указатель, ссылающийся на следующий символ, начиная с которого должен осуществляться поиск следующей лексемы.
  • Каждый последующий вызов функции с нулевым указателем в качестве значения первого аргумента продолжает поиск лексем, начиная с того места в строке, на которое указывает возвращенное в результате последнего вызова значение указателя.
  • Функция strtok () возвращает нулевой указатель, если лексемы не обнаружены.

21

Строки

  • Библиотечные функции обработки символов (ctype.h)

22

Строки

23

Строки

24

Строки

  • Библиотечные функции преобразования строк (stdlib.h)

25

Строки

  • Функции поиска из библиотеки обработки строк (string.h)

26

Строки

  • Примеры использования функций поиска из библиотеки обработки строк (string.h)
  • #include <iostream>
  • #include <string.h>
  • using namespace std;
  • int main()
  • { // использование strchr
  • char *str ="This is a text";
  • char ch1 = 's', ch2 = 'o';
  • cout << endl << "ch1 = " << ch1 << " ch2 = " << ch2 << endl;
  • if (strchr(str, ch1) != NULL)
  • cout << "ch1 is in " << "\"" << str << "\"" << endl;
  • else
  • cout << "ch1 is not in " << "\"" << str << "\"" << endl;
  • if (strchr(str, ch2) != NULL)
  • cout << "ch2 is in " << "\"" << str << "\"" << endl;
  • else
  • cout << "ch2 is not in " << "\"" << str << "\"" << endl;
  • }

27

Строки

  • Примеры использования функций поиска из библиотеки обработки строк (string.h)
  • #include <iostream>
  • #include <string.h>
  • using namespace std;
  • int main()
  • { // использование strcspn и strspn
  • char *str1 = "The value is 3.14159";
  • char *str2 = "3.14159 is the value";
  • char *str3 = "1234567890";
  • cout <<endl <<"str1 = "<< str1 <<" str3 = " <<str3 << endl;
  • // длина начальной части строки str1, не содержащая
  • // символов из str2, равна
  • cout << " - " << strcspn(str1,str3) << endl;
  • cout <<endl <<"str2 = "<< str2 <<" str3 = " <<str3 << endl;
  • // длина начальной части строки str1, содержащая только
  • // символы из str2, равна
  • cout << " - " << strspn(str2,str3) << endl;
  • }

28

Строки

  • Примеры использования функций поиска из библиотеки обработки строк (string.h)
  • #include <iostream>
  • #include <string.h>
  • using namespace std;
  • int main()
  • { char *str = "This is a text";
  • // использование strpbrk
  • char *str2 = "pink";
  • char *str3 = "is a";
  • cout <<endl <<"str = "<< str <<" str2 = " <<str2 << endl;
  • // среди символов строки str2 первый, встречающийся
  • // в строке str
  • cout << " - " << strpbrk(str,str2) << endl;
  • // использование strstr
  • cout <<endl <<"str = "<< str <<" str3 = " <<str3 << endl;
  • cout << " - " << strstr(str,str3) << endl;
  • }

29

Строки

  • Пример 1:
  • /* Дана строка символов, состоящая из слов. Слова разделяются пробелом. Удалить из строки все слова, начинающиеся с цифры.*/
  • #include <stdio.h>
  • #include <string>
  • #include <ctype.h>
  • using namespace std;
  • int main(void)
  • { char s[250], //исходная строка
  • w[25], //слово
  • mas[10][25]; //массив слов
  • int k=0,t=0,i,len,j;
  • puts("\n Введите строку");
  • gets(s);
  • len = strlen(s);

30

Строки

while(t<len) { for(j=0,i=t; s[i]!= ' '; i++, j++) w[j] = s[i]; //формируем слово до пробела w[j] = '\0'; //формируем конец строки strcpy(mas[k],w); //копируем слово в массив k++; //увеличиваем счетчик слов t=i+1; //переходим к следующему слову в исходной строке } strcpy(s,""); //очищаем исходную строку for(t=0; t<k; t++) if(!isdigit(mas[t][0])) //если символ не цифра { strcat(s,mas[t]); //копируем в строку слово strcat(s," "); //копируем в строку пробел } puts(s); //выводим результат }

31

Строки и функции

  • Задача: составить функцию, которая переставляет символы строки в обратном порядке.
  • Алгоритм:
    • определить длину строки ;
    • все символы первой половины строки переставить с соответствующими символами второй половины:

32

Строки и функции

  • Программа:
  • #include <conio.h>
  • #include <string>
  • using namespace std;
  • void Reverse ( char s[])
  • { int len = strlen(s);
  • char c;
  • for ( int i = 0; i < len/2; i ++ )
  • { c = s[i]; s[i] = s[len-i-1]; s[len-1-i] = c; }
  • }
  • int main()
  • { char s[] = "0123456789";
  • Reverse(s); puts(s);
  • Reverse(s + 5); puts(s); // инверсия части строки
  • }

33

Строки и текстовые файлы

  • Функции ввода - вывода для посимвольной обработки текстовых файлов:

Похожие материалы

Информация о работе

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.