Строковая переменная С является частично заполненным массивом символов.  Подобно другим частично заполненным массивам, она содержит данные в идущих подряд элементах, начиная с нулевого. И в ней занято столько позиций, сколько нужно для хранения данных. Однако для отслеживания количества заполненных элементов массива ей не требуется отдельная переменная типа int. Информация о месте окончания строки содержится в ней самой - после последнего символа строки в строковой переменной С располагается специальный символ '\0'. Поэтому, если в переменной s содержится строка «Язык С++», элементы массива заполнены следующим образом:


s[0]

s[1]

s[2]

s[3]

s[4]

s[5]

s[6]

s[7]

s[8]

s[9]

s[10]

Я

з

ы

к

С

+

+

\0

?

?


Объявление строковой переменной С

Строковая переменная С - это обычный массив символов, используемый особым образом. Она объявляется так же, как любой другой массив символов и имеет следующий синтаксис:

char имя_массива[максимальный _размер_строки_С +1];

Пример: charmy_c_stringC[12]:Единица прибавляется для того, чтобы массив вмещал нуль-символ ' \0', отмечающий конец хранящейся в массиве строки. В частности, строковая переменная my_c_string в приведенном выше примере вмещает строку С длиной в одиннадцать или менее символов.

Инициализация строковой переменной С

Строковую переменную С можно инициализировать при объявлении, как в следующем примере:

char my_string[] - "РТСУИиИС";

Эта инициализация автоматически помещает в конец строки С символ '\0'. Если в квадратных скобках не задано число, создается массив, длина которого на единицу больше длины помещаемой в него строки. Так, приведенный оператор объявляет массив my_string из одиннадцати  индексированных переменных (десят для символов строки «РТСУ И и ИС» и один для нуль-символа '\0').

НЕ нашли? Не то? Что вы ищете?

       Таким образом,  инициализируя строковую переменную С, можно опустить размер массива. C++ автоматически присвоит ей размер, который будет на единицу больше, чем длина заключенной в кавычки строки (один дополнительный элемент массива для символа '\0').

Ввод и вывод строк

Строки с можно выводить с помощью оператора вывода << и  строковые переменные С можно заполнять, используя оператор ввода >> , но нужно

иметь в виду одно обстоятельство: как и для других типов данных, при вводе

строк С пропускаются символы пробела, табуляции и перевода строки. Более

того, на очередном из перечисленных символов процесс чтения входных данных останавливается.

Для того, чтобы программа прочитала всю строку с символами пробела

и табуляции, то можно прочитать ее по частям с помощью оператора ввода >>, а потом собрать в единое целое. Но это, во-первых, утомительно, а во-вторых, возникает проблема устранения символов пробела и табуляции. Гораздо проще и надежнее воспользоваться стандартной функцией-членом getline включенной в любой входной потоковый объект cin.  Пока только укажем синтаксис использования этой функции, а основные ее характеристики опишем в разделе «Функция»: 

cin. getline(my_string, максимдльноеколичествосимволов + 1)

Из потока cin  считывается одна строка символов и помещается в переменную my_string. Если размер строки превышает максимальноеколичествосимволов, будет прочитана только ее начальная часть, равная по длине этому значению. (Единица прибавляется, так как каждая строка С содержит нуль-символ '\0', отмечающий ее конец, и поэтому строка в переменной строковая_перемениая на единицу длиннее прочитанной строки.)

Задание 17

Дана строка. Осуществить вывод отдельных слов строки. Разделителем являются пробел и знаки препинания.

Вариант 1. Без использования двухмерного массива строк.

int main(int argc, char *argv[])

{

  char matn[100];

  char split[15],delim[]=" .!?,;:/-";

  cin. getline(matn,100);

  bool slovo=false;

  int i, j,k=0,n=strlen(matn),m=strlen(delim);

  for(i=0;i<n;i++)

  {

  for(j=0;j<m;j++)

  {

  if(matn[i]==delim[j])

  slovo=true;

  }

  if(slovo==true)

  {

  if (k!=0)

  {

  for(int t=0;t<k;t++)

  cout<<split[t];

  cout<<endl;

  } 

  k=0;

  slovo=false;

  }

  else

  {

  split[k]=matn[i];

  k++;

  } 

  }

  if (k!=0)

  {

  for(int t=0;t<k;t++)

  cout<<split[t];

  cout<<endl;

  } 

  system("PAUSE");

  return EXIT_SUCCESS;

}

Вариант 2. С использованием двухмерного массива строк.

int main(int argc, char *argv[])

{

  char matn[100];

  char split[100][15],delim[]=" .!?,/-";

  cin. getline(matn,100);

  bool slovo=false;

  int i, j,k[100],k1=0,n=strlen(matn),m=strlen(delim);

  for(i=0;i<n;i++)

  {

  k[i]=0; 

  for(j=0;j<m;j++)

  {

  if(matn[i]==delim[j])

  slovo=true;

  }

  if(slovo==true)

  {

  if (k[k1]!=0)

  k1++;

  slovo=false;

  }

  else

  {

  split[k1][k[k1]]=matn[i];

  k[k1]++;

  } 

  }

  cout<<k1<<endl;

  for(i=0;i<k1;i++)

  {

  for(int t=0;t<k[i];t++)

  cout<<split[i][t];

  cout<<endl;

  } 

  system("PAUSE");

  return EXIT_SUCCESS;

}


Функции

Работа над программой начинается с выработки метода решения поставленной задачи и представления его в виде инструкций, предназначенных человеку, а не компьютеру. Такой набор инструкций называется алгоритмом. Наилучший подход к разработке алгоритма следующий: разбить начальную задачу на несколько подзадач, каждую из них разбить на меньшие подзадачи и т. д. Наконец будут выделены подзадачи столь малого размера, что реализовать их на языке C++ окажется совсем просто. Данная методика называется нисходящим проектированием (ее также называют пошаговой детализацией или методикой «разделяй и властвуй»).

Следуя этому методу, сначала разрабатывают алгоритмы, а затем реализуют их в виде программ и подпрограмм, сохраняя структуру «задача-подзадача». В результате получается понятная программа, которую в дальнейшем легко модифицировать, не говоря уже о том, что ее гораздо проще писать, тестировать и отлаживать. Как и большинство других языков программирования, C++ предоставляет специальные средства для реализации подзадач в виде отдельных частей программы. Такие части, в иных языках называемые подпрограммами или процедурами, в C++ именуются функциями.

Одно из преимуществ структурирования программы в виде набора функций - возможность распределения работы над проектом между несколькими программистами, пишущими каждый свою группу функций. Это особенно важно при создании крупных программ, которые невозможно разработать в одиночку в короткий срок, таких как компиляторы или офисные системы.

В состав C++ входят библиотеки стандартных функций, которые можно использовать в разрабатываемых программах. Значение, передаваемое функции при вызове, называется ее аргументом, а то, которое она вычисляет, - возвращаемым значением. Функция может иметь более одного аргумента, но возвращаемое значение у нее только одно. Ее можно представить как маленькую программу, аргументы которой аналогичны входным данным, а возвращаемое значение - выходным данным. Пользоваться функцией в программе очень просто: необходимо указать имя функции и значения аргументов. Это называется вызовом функции. Аргументами могут быть константа, переменная или более сложное выражение. Вызов функции является обыкновенным выражением, его можно использовать везде, где допускается применение выражения того типа, к которому относится возвращаемое функцией значение. Например, значение, возвращаемое функцией sqrt из библиотеки cmath, имеет тип doublе.

Вообще, вызов функции  это выражение, состоящее из имени функции, за которым следуют аргументы, заключенные в круглые скобки. Если у функции более одного аргумента, их разделяют запятыми. Вызов функции может использоваться как любое другое выражение, тип которого соответствует типу возвращаемого ею значения. Синтаксис вызова функции:

  имя_функции(список_аргументов)

Здесь список_дргументов - разделенный запятыми список аргументов аргумент_1, аргумент_2,  аргумент_послецний

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

Для объявления и инициализации строк С не требуется никакой директивы include или using. Однако при обработке строк вы наверняка будете применять те или иные предопределенные функции из библиотеки cstring. Поэтому, решив воспользоваться строками С, лучше сразу включите в начало файла программы директиву

#include <cstring>

В таблице 5 приведены некоторые стандартные функции для работы со строками С из библиотеки cstring. В функцияхsatr – строка, s – строковая переменная, n - целое число.

Таблице 5.

Функция

Описание

strcpy(satr, s)

Копирует строковое значение, заданное в аргументе satr в строковую переменную s

strncpy(satr, s,n)

Похожа на strcpy, но копирует максимум nсимволов

strcat(satr, s)

Выполняет конкатенацию строк, добавляя значение satr в конец строки, хранящейся в переменной s

strncat(satr, s,n)

Похожа на strcat, но добавляет максимум nсимволов

strlen(satr)

Возвращает целое число, равное длине строки satr, (Нуль-символ '\0' не учитывается.)

strcmp(satr1,satr2)

Возвращает 0, если satr1 и satr2 одинаковы. Возвращает отрицательное значение, если satr1 меньше, чем satr2,  положительное значение, если satr1больше, чем satr2. При сравнениииспользуетсялексикографическийпорядок строк

strcnmp(satr1,satr2,n)

Похожа на strcmpно добавляет максимум nсимволов

strstr(satr1,satr2)

Возвращает указатель на первое вхождение заданной подстроки satr2 в строке satr1.

strchr(satr, ramz)

Возвращает указатель на первое вхождение заданного символа ramzв строке satr1.

strrchr(satr1, ramz)

Возвращает указатель на последное вхождение заданного символа ramzв строке satr1.

       Кроме того, имеется ряд функций для обработки символов (Таблица 6.)

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15