§ 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. Тэсціраванне.