§ 9. Строковые величины

9.2. Сравнение и сложение строковых величин

Так же, как и для других типов данных, для строк определены свои операции — действия, которые можно выполнять с данными типа string. Для строкового типа такими операциями являются сравнение и сложение.

Для сравнения строк нужно уметь сравнивать символы. Строки сравниваются посимвольно. Сначала сравниваются первые символы двух строк. Если символы различны, то больше та строка, символ которой имеет больший номер. Если символы одинаковые, то переходят к сравнению следующих символов. Сравнение заканчивается, когда найдены различные символы или в одной из строк закончились символы. В этом случае больше та строка, в которой символы остались. Если при сравнении символов различия не найдены и строки закончились одновременно, то они равны (пример 9.2). Порядок, в котором меньшая строка предшествует большей, называют лексикографическим. Это название лексикографический порядок получил по аналогии с сортировкой по алфавиту в словаре.

При сравнении строк следует помнить, что заглавные и строчные буквы — это разные буквы, поскольку имеют различные номера в таблице символов. Поэтому строки "mama" и "Mama" будут различными, а неравенство "mama" > "Mama" — верным (у буквы 'm' код 109, а у 'М' — 77). Для проверки правильности сравнения строк можно воспользоваться программой из примера 9.3.

Для строк определена операция сложение (конкатенация). Обозначается она знаком «+». В результате сложения двух строк получается новая строка, в которой после символов первой строки будут записаны символы второй строки. Результат данной операции зависит от порядка слагаемых (пример 9.4).

Пример 9.5. Написать программу, которая просит ввести название государства и его столицу, а затем выводит сообщение:

Столица государства … — город … .

Вместо многоточия должны быть выведены соответствующие значения.

Этапы выполнения задания

I. Исходные данные: переменные str (название государства) и gor (название города).

II. Результат: переменная s (итоговая строка).

III.  Алгоритм решения задачи.

1. Ввод исходных данных. 
2. Создание итоговой строки. 
3. Вывод строки.

IV. Описание переменных: str, gor, s – string.

Пример 9.2. Примеры сравнения строк.

s1 s2 Результат

"string"

"char"

s1 > s2

"строка"

"Строка"

s1 > s2

"book"

"Magazine"

s1 > s2

"book"

"magazine"

s1 < s2

"липа"

"лист"

s1 < s2

"леска"

"лес"

s1 > s2

"112"

"7"

s1 < s2

"123"

"11111111"

s1 > s2

"123"

"123"

s1 = s2

Пример 9.3. Сравнение строк.

#include <iostream>

#include <string>

 

using namespace std;

 

int main()

{

  string s1, s2;

  cout << "1 stroka" << endl;

  getline(cin, s1);

  cout << "2 stroka" << endl;

  getline(cin, s2);

  if (s1 > s2)

    cout << "s1 > s2" << endl;

  else

    if (s1 < s2)

      cout << "s1 < s2" << endl;

    else

      cout << "s1 = s2" << endl;

  return 0;

}

Эта программа будет корректно работать как для латинских символов, так и для русских, невзирая на то что команды для работы с русскими буквами не подключены. Это можно объяснить тем, что относительный порядок символов соответствует алфавитному. Поэтому какой бы код не имела буква «Б», она будет после буквы «А». Исключением является буква «ё». В разных кодовых таблицах она может располагаться или до всех русских букв, или после них.

Пример 9.4. Примеры сложения строк.

#include <iostream>

#include <string>

 

using namespace std;

 

int main()

{

  string s1 = "Pasha";

  string s2 = "Ivanov";

  string s3 = s1 + " " + s2;

  string s4 = s2 + " " + s1;

  cout << "s3 - " << s3 << endl;

  cout << "s4 - " << s4 << endl;

  return 0;

}

Тестирование:

Пример 9.5.  

V. Программа:

#include <iostream>

#include <string>

#include <windows.h>

 

using namespace std;

 

int main()

{

  SetConsoleCP(1251);

  SetConsoleOutputCP(1251);

  string str, gor;

  cout << "название государства" << endl;

  cin >> str;

  cout << "название столицы" << endl;

  cin >> gor;

  string s = "Столица государства "

         + str + " — город " + gor;

  cout << s << endl;

   return 0;

}

 VI. Тестирование