Опубликован: 02.02.2011 | Доступ: свободный | Студентов: 3341 / 952 | Оценка: 4.43 / 3.57 | Длительность: 33:06:00
Специальности: Программист
Лекция 9:

Функции для работы со строками

< Лекция 8 || Лекция 9: 123 || Лекция 10 >

Пример 2.

//Программа демонстрирует работу функций из файла string.h 
#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[]){
  char st[50],sp[100],str[]="", 
       si[]="qwerty",
       sl[]="qwerty",
       sw[]="qwertyu";
  int len=0, sravn1, sravn2, sravn3, kol=5;    
  printf("Введите строку: ");
  gets(st);
  len=strlen(st); printf("Длина строки = %d\n",len);
  printf("Конкатенация строк: %s\n",strcat(st,"12cdb")); 
  sravn1=strcmp(si,sl);
  printf("Сравнение строк: %s==%s результат %d\n", 
          si,sl,sravn1);
  sravn2=strcmp(si,sw);
  printf("Сравнение строк: %s<%s результат %d\n", 
          si,sw,sravn2);
  sravn3=strcmp(sw,si);
  printf("Сравнение строк: %s>%s результат %d\n", 
          sw,si,sravn3);
  printf("Копирование байтов: %s\n",strcpy(sp,st));
  printf("Преобразование букв нижнего регистра в верхний: %s\n", 
strupr(st));
  printf("Преобразование букв верхнего регистра в нижний: %s\n", 
         strlwr(st));
  printf("Копирование %d символов в другую строку: %s\n",  
          kol,strncpy(str,st,kol)); 
  printf("Поиск в строке первого появления символа из другой строки:  
         %s\n",strpbrk(st,si));
  printf("Поиск в строке последнее вхождение заданного 
          символа: %s\n",strrchr(st,'t')); 
  system("pause");
  return 0;
}

Пример 3.

//Поиск множества неповторяющихся символов строки
#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[]){
  char st[80];
  int i,j,flag,len;
  printf("Введите строку: ");
  gets(st);
  len=strlen(st); //длина строки
  printf("Неповторяющиеся символы строки образуют множество: ");
  for (i=0;i<len;i++){
    flag=0; //флаг проверки на совпадение
    for (j=0;j<i;j++) //сравнение символа с предыдущими
      if (st[i]==st[j]) flag=1;
    if (flag==0)printf("%c",st[i]);
  }
  system("pause");
  return 0;
}

Пример 4.

/*Удаление лишних левых и внутренних пробелов в строке при выводе*/
#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[]){
  char st[80];
  int i=0,len;
  printf("Введите строку: ");
  gets(st);
  len=strlen(st);//длина строки 
  printf("Преобразованная строка: ");
  //Удалены лишние пробелы слева 
  while (st[i++]==' '); 
  //Удалены лишние пробелы внутри строки  
  for (--i;i<len;i++)
    if ((st[i]!=' ')||(st[i+1]!=' ')) 
      printf("%c",st[i]); //если рядом два пробела
  system("pause");
  return 0;
}

Ключевые термины

Конкатенация строк – это результат последовательного соединения строк.

Лексикографический порядок – правило сравнения символов, основанное на величине кода внутреннего представления каждого символа.

Пустая строка – это строка единичной длины, содержащая только символ конца строки.

Сравнение строк – это результат проверки выполнения отношения "больше", "меньше" или "равно" над строками.

Стандартные функции по работе со строками – это функции обработки строк, прототипы которых входят в стандартные библиотеки С++.

Краткие итоги

  1. Для работы со строками в языке С++ предусмотрены стандартные функции, прототипы которых включены в стандартные библиотеки stdlib.h и string.h.
  2. При обращении к функциям для работы со строками следует учитывать, что изменение значений элементов строк сохраняются после завершения работы функции.
  3. Перед использованием строки в программном коде ее необходимо проинициализировать. Неинициализированные строки могут привести к некорректной работе программы.
  4. В некоторых стандартных функциях по работе со строками следует проводить контроль длин параметров.
  5. Результат работы некоторых функций требует принудительного добавления к строке символа конца строки.
  6. Значения элементов строк зависят от регистра.
  7. Изменение регистра символов кириллицы в программе может выполняться некорректно.
< Лекция 8 || Лекция 9: 123 || Лекция 10 >
Денис Курбатов
Денис Курбатов
Владислав Нагорный
Владислав Нагорный

Подскажите, пожалуйста, планируете ли вы возобновление программ высшего образования? Если да, есть ли какие-то примерные сроки?

Спасибо!