Порівняння рядків у с. Як здійснюється оголошення змінної типу string? Присвоєння рядків

Робота з рядками. Клас string. Конструктори класу. Функції assign() , append() , insert() , replace() , erase() , find() , rfind() , compare() , c_str() . Приклади

1. Яке призначення класу string у програмах C++?

Клас string призначений для роботи з рядками типу char* , які є рядком із завершальним нулем. Клас string був запроваджений як альтернативний варіант для роботи з рядками типу char*. Рядки, які завершуються символом ‘\0’ ще називаються C-рядками. Оскільки, string є класом, можна оголошувати об'єкти цього класу.

2. Які модулі (бібліотеки) потрібно підключити, щоб використовувати можливості класу string у MS Visual Studio C++?

Щоб використовувати можливості класу string у MS Visual Studio (C++), потрібно підключити бібліотеку і простір імен std.

#include using namespace std;
3. Як здійснюється оголошення змінної типу string ? Приклади

Оголошення змінної типу string здійснюється так само як і звичайної змінної. Можливий варіантоголошення з одночасною ініціалізацією.

/ / Тип string string s1; // Змінна з ім'ям s1 типу string string s2 = "This is a string variable" ; // оголошення з ініціалізацією // Використання змінної типу string з оператором присвоєння s1 = s2; // s1 = "This is a string variable" s2 = "New text";
4. Які переваги та недоліки дає використання класу string у порівнянні з типом char*?

Створення нового типу string було зумовлено недоліками роботи з рядками символів, демонстрував тип char* . У порівнянні з типом char* тип string має такі основні переваги:

  • можливість обробки рядків стандартними операторами C++ ( = , + , = = , <> і т.п.). Як відомо, при використанні типу char* навіть найпростіші операції з рядками виглядали складно та вимагали написання надмірного програмного коду;
  • забезпечення найкращої надійності (безпеки) програмного коду. Наприклад, при копіюванні рядків тип string забезпечує відповідні дії, які можуть виникнути у разі, якщо рядок-джерело має більший розмір ніж рядок-приймач;
  • забезпечення рядка як самостійного типу даних. Оголошення типу string як рядки є єдиним всім змінних у програмі, що забезпечує несуперечність даних.

Основним недоліком типу string у порівнянні з типом char* є уповільнена швидкість обробки даних. Це з тим, що тип string – це, власне, контейнерний клас. А робота з класом потребує додаткової реалізації програмного коду, який, у свою чергу, займає зайвий час.

5. Які оператори можна використовувати з об'єктами класу string?

Клас string є зручним тим, що дозволяє зручно маніпулювати рядками, використовуючи стандартні (перевантажені) оператори.

З об'єктами класу string можна використовувати наступні оператори

  • = - Привласнення
  • + - Конкатенація (об'єднання рядків)
  • += - Привласнення з конкатенацією
  • == – рівність
  • != – нерівність
  • < – менше
  • <= - менше або дорівнює
  • > - Більше
  • >= - більше або дорівнює
  • - Індексація

Наприклад,який демонструє використання вищенаведених операторів

// тип string, операції над рядками string s1 = "s-1"; string s2 = "s-2"; string s3; bool b; // Операція "=" (присвоєння рядків) s3 = s1; // s3 = "s-1" // Операція "+" - конкатенація рядків s3 = s3 + s2; // s3 = "s-1s-2" // Операція "+=" - привласнення з конкатенацією s3 = "s-3"; s3 += "abc"; // s3 = "s-3abc" // Операція "==" - порівняння рядків b = s2 = = s1; // b = false b = s2 = = "s-2"; // b = true // Операція "!=" - Порівняння рядків (не рівно) s1 = "s1"; s2 = "s2"; b = s1! = s2; // b = true // Операції "<" и ">- порівняння рядків s1 = "abcd"; s2 = "de"; b = s1 > s2; // b = false b = s1< s2; // b = true // Операції "<=" и ">=" - порівняння рядків (менше або одно, більше або одно) s1 = "abcd"; s2 = "ab"; b = s1> = s2; // b = true b = s1<= s2; // b = false b = s2 >= "ab"; // b = true // Операція – індексація char c; s1 = "abcd"; c = s1; // c = "c" c = s1; // c = "a"
6. Чи містить клас string конструктори?

Як і будь-який клас, клас string має низку конструкторів. Основні їх такі:

String(); string(const char * str); string(const string & str);

7. Приклади ініціалізації за допомогою конструкторів

Нижче наведено приклади ініціалізації змінних типу string

String s1("Hello!"); string s2 = "Hello!" ; // ініціалізація - конструктор string (const char * str) char * ps = "Hello"; string s3(ps); // ініціалізація string s4(s3); // ініціалізація – конструктор string(const string & str) string s5; // ініціалізація - конструктор string()

8. Привласнення рядків. Функція assign(). Приклади

Щоб присвоїти один рядок іншому, можна застосувати один із двох методів:

  • використовувати оператор присвоєння ‘=’ ;
  • використовувати функцію assign() із класу string .

Функція assign() має кілька перевантажених реалізацій.

Перший варіант – виклик функції без параметрів

String &assign(void);

У цьому випадку відбувається просте присвоєння одного рядка іншого.

Другий варіант дозволяє копіювати задану кількість символів з рядка:

String &assign(const string & s, size_type st, size_type num);

  • s – об'єкт, з якого береться вихідний рядок;
  • st – індекс (позиція) у рядку, з якого починається копіювання num символів;
  • num - кількість символів, які потрібно скопіювати з позиції st;
  • size_type – порядковий тип даних.

Третій варіант функції assign() копіює в об'єкт, що викликає, перші num символів рядка s :

String & assign(const char * s, size_type num);

  • s – рядок, який завершується символом ‘\0’ ;
  • num – кількість символів, які копіюються в об'єкт, що викликає. Копіюються перші num символи з рядка s .

Нижче наведено приклад із різними реалізаціями функції assign() .

приклад.

// Присвоєння рядків, функція assign() string s1 = "сайт"; string s2; string s3; char * ps = "сайт"; s3 = s1; // s3 = "сайт" s2.assign(s1); // s2 = "сайт" s2.assign(s1, 0, 4); // s2 = "best" s2.assign(ps, 8); // s2 = "bestprog"
9. Об'єднання рядків. Функція append(). приклад

Для об'єднання рядків використовується функція append(). Для додавання рядків також можна використовувати операцію ‘+’ , наприклад:

String s1; string s2; s1 = "abc"; s2 = "def"; s1 = s1 + s2; // s1 = "abcdef"

Однак, функція append() добре підходить, якщо потрібно додавати частину рядка.

Функція має такі варіанти реалізації:

String &append(const string & s, size_type start); string &append(const char * s, size_type num);

У першому варіанті реалізації функція отримує посилання на рядковий об'єкт s, який додається до об'єкта, що викликає. У другому варіанті реалізації функція отримує покажчик на рядок типу const char *, який завершується символом '\0'.

приклад.Демонстрація роботи функції append().

String s1 = "abcdef"; s2 = "1234567890"; append(s2, 3, 4); // s1 = "abcdef4567" char * ps = "1234567890"; s1 = "abcdef"; s1.append(ps, 3); // s1 = "abcdef123"

10. Вставлення символів у рядку. Функція insert(). приклад

Щоб вставити один рядок у задану позицію іншого рядка, потрібно використовувати функцію insert() , яка має кілька варіантів реалізації.

Перший варіант функції дозволяє вставити повністю весь рядок s в задану позицію start викликаючого рядка (об'єкта, що викликає):

String & insert(size_type start, const string &s);

Другий варіант функції дозволяє вставити частину (параметри insStart , num ) рядка s в задану позицію start рядка, що викликає:

String & insert(size_type start, const string &s, size_type insStart, size_type num);

У наведених вище функціях:

  • s – рядок, який вставляється в рядок, що викликає;
  • start – позиція в рядку, з якого здійснюється вставка рядка s ;
  • insStart – позиція у рядку s, з якої відбувається вставка;
  • num – кількість символів у рядку s, які вставляються з позиції insStart.
string s1 = "abcdef"; string s2 = "1234567890"; s1.insert(3, s2); // s1 = "abc"+"1234567890"+"def"="abc1234567890def" s2.insert(2, s1, 1, 3); // s2 = "12bcd34567890"
11. Заміна символів у рядку. Функція replace(). приклад

Функція replace() виконує заміну символів у рядку, що викликає. Функція має такі варіанти реалізації:

String &replace(size_type start, size_type num, const string &s); string &replace(size_type start, size_type num, const string &s, size_type replStart, size_type replNum);

У першому варіанті реалізації рядок, що викликає, замінюється рядком s . Є можливість задати позицію (start) і кількість символів (num) у рядку, що викликає, які потрібно замінити рядком s.

Другий варіант функції replace() відрізняється від першого тим, що дозволяє замінювати рядок, що викликає, тільки частиною рядка s . У цьому випадку задаються два додаткові параметри: позиція replStart і кількість символів у рядку s , які утворюють підрядок, який замінює рядок, що викликає.

приклад.Демонстрація роботи функції replace().

String s1 = "abcdef"; string s2 = "1234567890"; s2.replace(2, 4, s1); // s2 = "12abcdef7890" s2 = "1234567890"; s2.replace(3, 2, s1); // s2 = "123abcdef67890" s2 = "1234567890"; s2.replace(5, 1, s1); // s2 = "12345abcdef7890" // Заміна символів, функція replace() string s1 = "abcdef"; string s2 = "1234567890"; s2.replace(2, 4, s1); // s2 = "12abcdef7890" s2 = "1234567890"; s2.replace(3, 2, s1); // s2 = "123abcdef67890" s2 = "1234567890"; s2.replace(5, 1, s1); // s2 = "12345abcdef7890" s2 = "1234567890"; s2.replace(5, 1, s1, 2, 3); // s2 = "12345cde7890" s2 = "1234567890"; s2.replace(4, 2, s1, 0, 4); // s2 = "1234abcd7890"

12. Видалення заданої кількості символів з рядка. Функція erase(). приклад

Для видалення символів з рядка, що викликає, використовується функція erase() :

String & erase (size_type index = 0, size_type num = npos);

  • index - індекс (позиція), починаючи з якої потрібно видалити символи в рядку, що викликає;
  • num – кількість символів, що видаляються.

приклад.

String s = "01234567890"; s.erase(3, 5); // s = "012890" s = "01234567890"; s.erase(); // s = ""

13. Пошук символу у рядку. Функції find() та rfind() . Приклади

У класі string пошук рядка в підрядку можна робити двома способами, які відрізняються напрямом пошуку:

  • шляхом перегляду рядка від початку до кінця за допомогою функції find();
  • шляхом перегляду рядка від кінця на початок функцією rfind() .

Прототип функції find() має вигляд:

Size_type find (const string & s, size_type start = 0) const;

  • s – підрядок, який шукається у рядку, що викликає цю функцію. Функція здійснює пошук першого входження рядка s. Якщо підрядок s знайдений у рядку, що викликав цю функцію, тоді повертається позиція першого входження. В іншому випадку повертається -1;

Прототип функції rfind() має вигляд:

Size_type rfind(const string &s, size_type start = npos) const;

  • s – підрядок, що шукається в рядку, що викликає. Пошук підрядка у рядку здійснюється від кінця до початку. Якщо підрядок s знайдено у рядку, що викликає, то функція повертає позицію першого входження. В іншому випадку функція повертає -1;
  • npos - позиція останнього символу рядка, що викликає;
  • start - позиція, з якої здійснюється пошук.

приклад 1.Фрагмент коду, який показує результат роботи функції find()

// тип string, функція find() string s1 = "01234567890"; string s2 = "345"; string s3 = "abcd"; int pos; pos=s1.find(s2); // pos = 3 pos = s1. find (s2, 1); // pos = 3 pos = s1. find ("jklmn", 0); // pos = -1 pos = s1. find (s3); // pos = -1 pos = s2. find (s1); // pos = -1

приклад 2.Демонстрація роботи функції rfind().

// тип string, функції find() та rfind() string s1 = "01234567890"; string s2 = "345"; string s3 = "abcd"; string s4 = "abcd---abcd" ; int pos; pos = s1.rfind(s2); // pos = 3 pos = s1.rfind (s2, 12); // pos = 3 pos = s1.rfind (s2, 3); // pos = 3 pos = s1.rfind (s2, 2); // pos = -1 pos = s2.rfind (s1); // pos = -1 pos = s1.rfind (s3, 0); // pos = -1 // Різниця між функціями find() та rfind() pos = s4.rfind(s3); // pos = 7 pos = s4. find (s3); // pos = 0
14. Порівняння частин рядків. функція compare() . приклад

Оскільки тип string є класом, то щоб порівняти два рядки між собою можна використовувати операцію ‘= =’ . Якщо два рядки однакові, результат порівняння буде true . Інакше результат порівняння буде false .

Але якщо потрібно порівняти частину одного рядка з іншого, то цього передбачена функція compare() .

Прототип функції compare() :

int compare(size_type start, size_type num, const string &s) const;
  • s – рядок, який порівнюється з рядком, що викликає;
  • start – позиція (індекс) у рядку s, з якої починається перегляд символів рядка для порівняння;
  • num – кількість символів у рядку s , які порівнюються з рядком, що викликає.

Функція працює в такий спосіб. Якщо рядок, що викликає, менше рядка s , то функція повертає -1 (негативне значення). Якщо рядок, що викликає, більше рядка s , функція повертає 1 (позитивне значення). Якщо два рядки дорівнюють, функція повертає 0.

приклад. Демонстрація роботи функції compare() :

// тип string, функція compare() string s1 = "012345"; string s2 = "0123456789"; int res; res = s1.compare(s2); // res = -1 res = s1.compare ("33333"); // res = -1 res = s1.compare ("012345"); // res = 0 res = s1.compare ("345"); // res = -1 res = s1. compare (0, 5, s2); // res = -1 res = s2. compare (0, 5, s1); // res = -1 res = s1.compare (0, 5, "012345"); // res = -1 res = s2. compare (s1); // res = 1 res = s2.compare ("456"); // res = -1 res = s2.compare ("000000"); // res = 1
15. Отримання рядка із символом кінця рядка '\0' (char * ). Функція c_str(). приклад

Щоб отримати рядок, який закінчується символом ‘\0’ використовується функція c_str().

Прототип функції:

const char * c_str() const;

Функція оголошена з модифікатором const. Це означає, що функція не може змінювати об'єкт, що викликає, (рядок).

Приклад 1. Перетворення типу string на const char * .

// тип string, функція c_str() string s = "abcdef"; const char*ps; s = s.c_str(); //ps = "abcdef"

приклад 2.

Нижче показано переведення рядка з string у тип System::String для відображення його в елементі керування типу Label

34

--- Посібник з C# --- Рядки

З погляду регулярного програмування рядковий тип даних stringналежить до найважливіших в C#. Цей тип визначає та підтримує символьні рядки. У низці інших мов програмування рядок є масив символів. На C# рядки є об'єктами. Отже, тип string належить до посилальних.

Побудова рядків

Найпростіший спосіб побудувати символьний рядок - скористатися рядковим літералом. Наприклад, у наступному рядку коду змінного посилання на рядок str надається посилання на рядковий літерал:

String str = "Приклад рядка";

У цьому випадку змінна str ініціалізується послідовністю символів "Приклад рядка". Об'єкт типу string можна створити з масиву типу char. Наприклад:

Char chararray = ("e", "x", "a", "m", "p", "l", "e"); string str = новий string (chararray);

Як тільки об'єкт типу string буде створений, його можна використовувати скрізь, де тільки потрібно рядок тексту, укладеного в лапки.

Постійність рядків

Як не дивно, вміст об'єкта типу string не змінюється. Це означає, що одного разу створену послідовність символів не можна змінити. Але це обмеження сприяє більш ефективної реалізації символьних рядків. Тому цей, на перший погляд, очевидний недолік насправді перетворюється на перевагу. Так, якщо потрібен рядок як різновид вже наявного рядка, то для цієї мети слід створити новий рядок, що містить усі необхідні зміни. А оскільки строкові об'єкти, що не використовуються, автоматично збираються в "сміття", то про подальшій долінепотрібних рядків можна навіть не перейматися.

Слід, однак, підкреслити, що змінні посилання рядки (тобто об'єкти типу string) підлягають зміні, отже, можуть посилатися інший об'єкт. Але вміст самого об'єкта типу string не змінюється після створення.

Розглянемо приклад:

Static void addNewString() ( string s = "This is my stroke"; s = "This is new stroke"; )

Скомпілюємо додаток і завантажимо результуючу збірку в утиліту ildasm.exe. На малюнку показано CIL-код, який буде згенерований для методу void addNewString():

Зверніть увагу на наявність численних дзвінків коду операції ldstr (завантаження рядка). Цей код операції ldstr у CIL передбачає виконання завантаження нового об'єкта string у керовану купу. В результаті попередній об'єкт, в якому містилося значення This is my stroke, буде в кінцевому підсумку видалено збирачем сміття.

Робота з рядками

У класі System.Stringнадається набір методів для визначення довжини символьних даних, пошуку підрядки в поточному рядку, перетворення символів з верхнього регістру на нижній і навпаки, і т.д. Далі ми розглянемо цей клас докладніше.

Поле, індексатор та властивість класу String

У класі String визначено єдине поле:

Public static readonly string Empty;

Поле Empty означає порожній рядок, тобто. такий рядок, який не містить символів. Цим воно відрізняється від порожнього посилання типу String, яке просто робиться на неіснуючий об'єкт.

Крім цього, у класі String визначено єдиний індексатор, доступний тільки для читання:

Public char this (get;)

Цей індексатор дозволяє отримати символ за вказаним індексом. Індексація рядків, як і масивів, починається з нуля. Об'єкти типу String відрізняються сталістю і змінюються, тому цілком логічно, що у класі String підтримується індексатор, доступний лише читання.

І нарешті, у класі String визначено єдину властивість, доступну тільки для читання:

Public int Length ( get; )

Властивість Length повертає кількість символів у рядку. У прикладі нижче показано використання індексатора та властивості Length:

Using System; class Example ( static void Main() ( string str = "Простий рядок"; // Отримати довжину рядка і 6й символ у рядку використовуючи індексатор Console.WriteLine("Довжина рядка - (0), 6й символ - "(1)"") , str.Length, str); ) )

Оператори класу String

У класі String перевантажуються два наступні оператори: == і!=. Оператор == служить для перевірки двох символьних рядків на рівність. Коли оператор == застосовується до посилань на об'єкти, він зазвичай перевіряє, чи робляться обидві посилання однією і той самий об'єкт. А коли оператор == застосовується до посилань на об'єкти типу String, то щодо рівності порівнюється вміст самих рядків. Це саме стосується і оператора!=. Коли він застосовується до посилань на об'єкти типу String, то щодо нерівності порівнюється вміст самих рядків. У той самий час інші оператори відносини, зокрема =, порівнюють посилання об'єкти типу String так само, як і інших типів. А для того щоб перевірити, чи є один рядок більше за інший, слід викликати метод Compare(), визначений у класі String.

Як стане ясно далі, у багатьох видах порівняння символьних рядків використовуються відомості про культурне середовище. Але це не стосується операторів == і!=. Адже вони просто порівнюють порядкові значення символів у рядках. (Іншими словами, вони порівнюють двійкові значення символів, які не видозмінені нормами культурного середовища, тобто регіональними стандартами.) Отже, ці оператори виконують порівняння рядків без урахування регістру та налаштувань культурного середовища.

Методи класу String

У наступній таблиці перераховані деякі найцікавіші методи цього класу, згруповані за призначенням:

Методи роботи з рядками
Метод Структура та перевантажені версії Призначення
Порівняння рядків
Compare() public static int Compare(string strA, string strB)

Public static int Compare(string strA, string strB, bool ignoreCase)

Public static int Compare(string strA, string strB, StringComparison comparisonType)

Public static int Compare(string strA, string strB, bool ignoreCase, CultureInfo culture)

Статичний метод порівнює рядок strA з рядком strB. Повертає позитивне значення, якщо рядок strA більший за рядок strB; негативне значення, якщо рядок strA менший за рядок strB; і нуль, якщо рядки strA та strB рівні. Порівняння виконується з урахуванням регістру та культурного середовища.

Якщо параметр ignoreCase набуває логічного значення true, то при порівнянні не враховуються відмінності між великим і малим варіантами букв. В іншому випадку ці відмінності враховуються.

Параметр comparisonType визначає конкретний спосіб порівняння рядків. Клас CultureInfo визначений у просторі імен System.Globalization.

public static int Compare(string strA, int indexA, string strB, int indexB, int length)

Public static int Compare(string strA, int indexA, string strB, int indexB, int length, bool ignoreCase)

Public static int Compare(string strA, int indexA, string strB, int indexB, int length, StringComparison comparisonType)

Public static int Compare(string strA, int indexA, string strB, int indexB, int length, bool ignoreCase, CultureInfo culture)

Порівнює частини рядків strA та strB. Порівняння починається з рядкових елементів strA та strB і включає кількість символів, що визначаються параметром length. Метод повертає позитивне значення, якщо частина рядка strA більша за частину рядка strB; негативне значення, якщо частина рядка strA менша від частини рядка strB; і нуль, якщо порівнювані частини рядків strA та strB рівні. Порівняння виконується з урахуванням регістру та культурного середовища.

CompareOrdinal() public static int CompareOrdinal(string strA, string strB)

Public static int CompareOrdinal(string strA, int indexA, string strB, int indexB, int count)

Робить те саме, що метод Compare(), але не враховуючи локальних установок

CompareTo() public int CompareTo(object value)

Порівнює рядок з рядковим поданням об'єкта value. Повертає позитивне значення, якщо рядок, що викликає, більший за рядок value; негативне значення, якщо рядок, що викликає, менше рядка value; і нуль, якщо порівнювані рядки дорівнюють

public int CompareTo(string strB)

Порівнює рядок з рядком strB

Equals() public override bool Equals(object obj)

Повертає логічне значення true, якщо рядок, що викликає, містить ту ж послідовність символів, що і рядкове представлення об'єкта obj. Виконується порядкове порівняння з урахуванням регістру, але не враховуючи культурного середовища

public bool Equals(string value)

Public bool Equals(string value, StringComparison comparisonType)

Повертає логічне значення true, якщо рядок, що викликає, містить ту ж послідовність символів, що і рядок value. Виконується порядкове порівняння з урахуванням регістру, але не враховуючи культурного середовища. Параметр comparisonType визначає конкретний спосіб порівняння рядків

public static bool Equals(string a, string b)

Public static bool Equals(string a, string b, StringComparison comparisonType)

Повертає логічне значення true, якщо рядок містить таку ж послідовність символів, що і рядок b . Виконується порядкове порівняння з урахуванням регістру, але не враховуючи культурного середовища. Параметр comparisonType визначає конкретний спосіб порівняння рядків

Конкатенація (з'єднання) рядків
Concat() public static string Concat(string str0, string str1);

public static string Concat(params string values);

Комбінує окремі екземпляри рядків в один рядок (конкатенація)
Пошук у рядку
Contains() public bool Contains(string value) Метод, який дозволяє визначити, чи міститься у рядку певний підрядок (value)
StartsWith() public bool StartsWith(string value)

Public bool StartsWith(string value, StringComparison comparisonType)

Повертає логічне значення true, якщо рядок, що викликає, починається з підрядка value. В іншому випадку повертається логічне значення false. Параметр comparisonType визначає конкретний спосіб пошуку

EndsWith() public bool EndsWith(string value)

Public bool EndsWith(string value, StringComparison comparisonType)

Повертає логічне значення true, якщо рядок, що викликає, закінчується підрядком value. В іншому випадку повертає логічне значення false. Параметр comparisonType визначає конкретний спосіб пошуку

IndexOf() public int IndexOf(char value)

Public int IndexOf(string value)

Знаходить перше входження заданого підрядка або символу в рядку. Якщо символ або підрядок не виявлено, то повертається значення -1

public int IndexOf(char value, int startIndex)

Public int IndexOf(string value, int startIndex)

Public int IndexOf(char value, int startIndex, int count)

Public int IndexOf(string value, int startIndex, int count)

Повертає індекс першого входження символу або підрядка value в рядку, що викликає. Пошук починається з елемента, що вказується за індексом startIndex, і охоплює кількість елементів, що визначаються параметром count (якщо вказано). Метод повертає значення -1, якщо шуканий символ або підрядок не виявлено

LastIndexOf() Перевантажені версії аналогічні методу IndexOf()

Те ж, що IndexOf, але знаходить останнє входження символу або підрядка, а не перше

IndexOfAny() public int IndexOfAny(char anyOf)

Public int IndexOfAny(char anyOf, int startIndex)

Public int IndexOfAny(char anyOf, int startIndex, int count)

Повертає індекс першого входження будь-якого символу з масиву anyOf, виявленого в рядку, що викликає. Пошук починається з елемента, що вказується за індексом startIndex, і охоплює кількість елементів, що визначаються параметром count (якщо вони вказані). Метод повертає значення -1, якщо не виявлено збігу ні з одним із символів з масиву anyOf. Пошук здійснюється порядковим способом

LastIndexOfAny Перевантажені версії аналогічні методу IndexOfAny()

Повертає індекс останнього входження будь-якого символу з масиву anyOf, виявленого в рядку, що викликає.

Поділ та з'єднання рядків
Split public string Split(params char separator)

Public string Split(params char separator, int count)

Метод, що повертає масив string з присутніми в даному екземплярі підрядками всередині, які відокремлюються один від одного елементами зазначеного масиву char або string.

У першій формі методу Split() рядок, що викликає, поділяється на складові частини. У результаті повертається масив, що містить підрядки, отримані з рядка, що викликає. Символи, що обмежують ці підрядки, передаються у масиві separator. Якщо масив separator порожній або посилається на порожній рядок, то як роздільник підрядків використовується пробіл. А у другій формі даного методу повертається кількість підрядків, що визначаються параметром count.

public string Split(params char separator, StringSplitOptions options)

Public string Split(string separator, StringSplitOptions options)

Public string Split(params char separator, int count, StringSplitOptions options)

Public string Split(string separator, int count, StringSplitOptions options)

У двох перших формах методу Split() викликає рядок поділяється на частини і повертається масив, що містить підрядки, отримані з рядка, що викликає. Символи, які розділяють ці підрядки, передаються в масиві separator. Якщо масив separator порожній, то як роздільник використовується пробіл. А в третій та четвертій формах даного методу повертається кількість рядків, що обмежується параметром count.

Але у всіх формах параметр options позначає конкретний спосіб обробки порожніх рядків, які утворюються у разі, якщо два роздільника виявляються поруч. У перерахунку StringSplitOptions визначаються лише два значення: Noneі RemoveEmptyEntries. Якщо параметр options приймає значення None, то порожні рядки включаються до кінцевого результату поділу вихідного рядка. Якщо параметр options приймає значення RemoveEmptyEntries, то порожні рядки виключаються з кінцевого результатуподілу вихідного рядка.

Join() public static string Join(string separator, string value)

Public static string Join(string separator, string value, int startIndex, int count)

Будує новий рядок, комбінуючи вміст масиву рядків.

У першій формі методу Join() повертається рядок, що складається зі зчеплених підрядків, що передаються в масиві value. У другій формі також повертається рядок, що складається з підрядків, що передаються в масиві value, але вони зчіплюються у певній кількості count, починаючи з елемента масиву value. В обох формах кожен наступний рядок відокремлюється від попереднього роздільного рядка, що визначається параметром separator.

Заповнення та обрізання рядків
Trim() public string Trim()

Public string Trim(params char trimChars)

Метод, який дозволяє видаляти всі входження певного набору символів з початку та кінця поточного рядка.

У першій формі методу Trim() з рядка, що викликає, видаляються початкові і кінцеві пробіли. А в другій формі цього методу видаляються початкові і кінцеві входження в рядок символів з масиву trimChars. В обох формах повертається рядок, що отримується в результаті.

PadLeft() public string PadLeft(int totalWidth)

Public string PadLeft(int totalWidth, char paddingChar)

Дозволяє доповнити рядок символами ліворуч.

У першій формі методу PadLeft() вводяться прогалини з лівого боку рядка, що викликає, щоб її загальна довжина стала рівною значенню параметра totalWidth. А в другій формі даного методу символи, що позначаються параметром paddingChar, вводяться з лівого боку рядка, що викликає, щоб її загальна довжина стала рівною значенню параметра totalWidth. В обох формах повертається рядок, що отримується в результаті. Якщо значення параметра totalWidth менше довжини рядка, то повертається копія незміненого рядка.

PadRight() Аналогічно PadLeft()

Дозволяє доповнити рядок символами праворуч.

Вставка, видалення та заміна рядків
Insert() public string Insert(int startIndex, string value)

Використовується для вставки одного рядка в інший, де value позначає рядок, що вставляється в рядок, що викликає, за індексом startIndex. Метод повертає рядок, що вийшов у результаті.

Remove() public string Remove(int startIndex)

Public string Remove(int startIndex, int count)

Використовується для видалення частини рядка. У першій формі методу Remove() видалення виконується, починаючи з місця, що вказується за індексом startIndex, і продовжується до кінця рядка. А в другій формі даного методу з рядка видаляється кількість символів, що визначається параметром count, починаючи з місця, що вказується за індексом startIndex.

Replace() public string Replace(char oldChar, char newChar)

Public string Replace(string oldValue, string newValue)

Використовується для заміни частини рядка. У першій формі методу Replace() всі входження символу oldChar у рядку, що викликає, замінюються символом newChar. А в другій формі даного методу всі входження рядка oldValue в рядок, що викликає, замінюються рядком newValue.

Зміна регістру
ToUpper() public string ToUpper()

Робить великими всі літери в рядку, що викликає.

ToLower() public string ToLower()

Робить малими всі літери в рядку, що викликає.

Отримання підрядка з рядка
Substring() public string Substring(int startIndex)

Public string Substring(int startIndex, int length)

У першій формі методу Substring() підрядок витягується, починаючи з місця, що позначається параметром startIndex, і до кінця рядка, що викликає. А в другій формі даного методу витягується підрядок, що складається з кількості символів, що визначаються параметром length, починаючи з місця, що позначається параметром startIndex.

Приклад наступної програми використовує кілька із зазначених методів:

Using System; використовуючи System.Collections.Generic; використовуючи System.Linq; використовуючи System.Text; namespace ConsoleApplication1 ( class Program ( static void Main(string args) ( // Порівняємо перші два рядки string s1 = "це рядок"; string s2 = "це текст, а це рядок"; if (String.CompareOrdinal(s1, s2)) != 0) Console.WriteLine("Рядки s1 і s2 не рівні");if (String.Compare(s1, 0, s2, 13, 10, true) == 0) Console.WriteLine("При цьому в них є однаковий текст"); // Конкатенація рядків Console.WriteLine(String.Concat("\n" + "Один, два", "три, чотири")); // Пошук у рядку // Перше входження підрядка if (s2. IndexOf("це") != -1) Console.WriteLine("Слово \"це\" знайдено в рядку, воно "+" знаходиться на: (0) позиції", s2.IndexOf("це")); / Останнє входження підрядка if (s2.LastIndexOf("це") != -1) Console.WriteLine("Остання входження слова \"це\" знаходиться " + "на (0) позиції", s2.LastIndexOf("це" ));// Пошук з масиву символів char myCh = ("И","х","т"); if (s2.IndexOfAny(myCh) != -1) "+ "знайдений у теку ній рядку на позиції (0)", s2.IndexOfAny(myCh)); // Визначаємо чи починається рядок із заданої підрядки if (s2.StartsWith("це текст") == true) Console.WriteLine("Підстрока знайдена!"); // Визначаємо чи міститься у рядку підрядок // з прикладу визначення ОС користувача string myOS = Environment.OSVersion.ToString(); if (myOS.Contains("NT 5.1")) Console.WriteLine("Ваша операційна система Windows XP"); else if (myOS.Contains("NT 6.1")) Console.WriteLine("Ваша операційна система Windows 7"); Console.ReadLine(); ) ) )

Трохи про порівняння рядків у C#

Ймовірно, з усіх операцій обробки символьних рядків найчастіше виконується порівняння одного рядка з іншим. Перш ніж розглядати будь-які методи порівняння рядків, слід наголосити на наступному: порівняння рядків може бути виконане в середовищі.NET Framework двома основними способами:

    По-перше, порівняння може відображати звичаї та норми окремого культурного середовища, які найчастіше є налаштуваннями культурного середовища, що вступають в силу при виконанні програми. Це стандартна поведінка деяких, хоч і не всіх методів порівняння.

    І по-друге, порівняння може бути виконане незалежно від налаштувань культурного середовища лише за порядковими значеннями символів, що становлять рядок. Взагалі, при порівнянні рядків без урахування культурного середовища використовується лексикографічний порядок (і лінгвістичні особливості), щоб визначити, чи є один рядок більше, менше або дорівнює іншому рядку. При порядковому порівнянні рядки просто впорядковуються на підставі незмінного значення кожного символу.

Через відмінності способів порівняння рядків з урахуванням культурного середовища та порядкового порівняння, а також наслідків кожного такого порівняння настійно рекомендується керуватися кращими методиками, пропонованими в даний час корпорацією Microsoft. Адже вибір невірного способу порівняння рядків може призвести до неправильної роботи програми, коли вона експлуатується в середовищі, яке відрізняється від того, в якому вона розроблена.

Вибір способу порівняння символьних рядків є дуже відповідальним рішенням. Як правило і без будь-яких винятків, слід вибирати порівняння рядків з урахуванням культурного середовища, якщо це робиться з метою відображення результату користувачеві (наприклад, для виведення на екран ряду рядків, відсортованих у лексикографічному порядку). Але якщо рядки містять фіксовану інформацію, не призначену для зміни з урахуванням відмінностей у культурних середовищах, наприклад, ім'я файлу, ключове слово, адреса веб-сайту або значення, пов'язане із забезпеченням безпеки, слід вибрати порядкове порівняння рядків. Зрозуміло, особливості конкретного програми, що розробляється, диктуватимуть вибір відповідного способу порівняння символьних рядків.

У класі String надаються різні методипорівняння рядків, які перелічені у таблиці вище. Найбільш універсальним у тому числі є метод Compare(). Він дозволяє порівнювати два рядки повністю або частково, з урахуванням або без урахування регістру, способу порівняння, що визначається параметром типу StringComparison, а також відомостей про культурне середовище, що надаються за допомогою параметра типу CultureInfo.

Ті варіанти методу Compare(), які не містять параметр типу StringComparison, виконують порівняння символьних рядків з урахуванням регістру і культурного середовища. А в тих варіантах, що перевантажуються його, які не містять параметр типу CultureInfo, відомості про культурне середовище визначаються поточним середовищем виконання.

Тип StringComparison є перерахуванням, в якому визначаються значення, наведені в таблиці нижче. Використовуючи ці значення, можна організувати порівняння рядків, що задовольняє потреби конкретної програми. Отже, додавання параметра типу StringComparison розширює можливості методу Compare() та інших методів порівняння, наприклад Equals(). Це дає можливість однозначно вказувати спосіб передбачуваного порівняння рядків.

В силу відмінностей між порівнянням рядків з урахуванням культурного середовища та порядковим порівнянням дуже важливо бути гранично точним у цьому відношенні.

Значення, визначені у перерахунку StringComparison
Значення Опис
CurrentCulture Порівняння рядків здійснюється за допомогою поточних налаштувань параметрів культурного середовища
CurrentCultureIgnoreCase Порівняння рядків здійснюється з використанням поточних налаштувань параметрів культурного середовища, але без урахування регістру
InvariantCulture Порівняння рядків проводиться з використанням незмінних, тобто. універсальних даних про культурне середовище
InvariantCultureIgnoreCase Порівняння рядків проводиться з використанням незмінних, тобто. універсальних даних про культурне середовище та без урахування регістру
Ordinal Порівняння рядків здійснюється за допомогою порядкових значень символів у рядку. При цьому лексикографічний порядок може порушитись, а умовні позначення, прийняті в окремому культурному середовищі, ігноруються
OrdinalIgnoreCase Порівняння рядків здійснюється з використанням порядкових значень символів у рядку, але без урахування регістру

У будь-якому випадку метод Compare() повертає негативне значення, якщо перший порівнюваний рядок виявляється менше за другу; позитивне значення, якщо перший порівнюваний рядок більший за другий; і нарешті, нуль, якщо обидві порівнювані рядки рівні. Незважаючи на те, що метод Compare() повертає нуль, якщо порівнювані рядки рівні, для визначення рівності символьних рядків, як правило, краще користуватися методом Equals() або оператором ==.

Річ у тім, що метод Compare() визначає рівність рядків, що порівнюються, на підставі порядку їх сортування. Так, якщо виконується порівняння рядків з урахуванням культурного середовища, то обидва рядки можуть виявитися однаковими за порядком їх сортування, але не рівними по суті. За замовчуванням рівність рядків визначається методом Equals(), з порядкових значень символів без урахування культурного середовища. Отже, за умовчанням обидва рядки порівнюються у цьому методі на абсолютну, посимвольну рівність подібно до того, як це робиться в операторі ==.

Незважаючи на більшу універсальність методу Compare(), для простого порівняння символьних рядків простіше користуватися методом CompareOrdinal(). І, насамкінець, слід пам'ятати, що метод CompareTo() виконує порівняння рядків лише з урахуванням культурного середовища.

У наведеній нижче програмі демонструється застосування методів Compare(), Equals(), CompareOrdinal(), а також операторів == та!= для порівняння символьних рядків. Зверніть увагу на те, що два перші приклади порівняння наочно демонструють відмінності між порівнянням рядків з урахуванням культурного середовища та порядковим порівнянням в англомовному середовищі:

Using System; class Example ( static void Main() ( string str1 = "alpha"; string str2 = "Alpha"; string str3 = "Beta"; string str4 = "alpha"; string str5 = "alpha, beta"; int result; / / Спочатку продемонструвати відмінності між порівнянням рядків // з урахуванням культурного середовища та порядковим порівнянням result = String.Compare(str1, str2, StringComparison.CurrentCulture); ) Console.WriteLine(str1 + " більше " + str2); else Console.WriteLine(str1 + " одно " + str2); result = String.Compare(str1, str2, StringComparison.Ordinal); Console.Write("Порядкове порівняння рядків: "); if (result 0) Console.WriteLine(str1 + " більше " + str2); else Console.WriteLine(str1 + " одно " + str4); // Використовувати метод CompareOrdinal() str1, str2);Console.Write("Порівняння рядків методом CompareOrdinal():\n"); if (result 0) 1 + "рівно" + str4); Console.WriteLine(); // Визначити рівність рядків за допомогою оператора == // Це порядкове порівняння символьних рядків if (str1 == str4) Console.WriteLine(str1 + "==" + str4); // Визначити нерівність рядків за допомогою оператора! = if (str1! = str3) Console.WriteLine (str1 + "! = "+ str3); if(str1 != str2) Console.WriteLine(str1 + " != " + str2); Console.WriteLine(); // Виконати порядкове порівняння рядків без урахування регістру, // використовуючи метод Equals() if(String.Equals(str1, str2, StringComparison.OrdinalIgnoreCase)) Console.WriteLine("Порівняння рядків методом Equals() з " + "параметром OrdinalI: \n" + str1 + " одно " + str2); Console.WriteLine(); // Порівняти частини рядків if(String.Compare(str2, 0, str5, 0, 3, StringComparison.CurrentCulture) > 0) ( Console.WriteLine("Порівняння рядків з урахуванням поточного культурного середовища:" + "\n3 перших символів рядка " + str2 + " більше, ніж 3 перших символи рядка " + str5); ) ) )

Виконання цієї програми призводить до наступного результату:

п»їTrustworthy SEO Agency India Can Increase Revenues of Small Businesses

80% users search on Google та інші search engines before making a purchase and more than 50% статей, що генеруються через search engines get converted. Ці дві статистики випливають з важливості Search Engine Optimization. Там є багато таких статей і фактів, що робити clear point: будь-який маленький, мідний або великий простий бізнес потребує професійних SEO послуг. Малі businesses і startups often face budget issues. Вони можуть виявити будь-яке нестерпне SEO SEO агентства від Індії, щоб отримати велику SEO послуг у своєму бюджеті, щоб збільшити свої покарання.
Search holds a great impact on consumers' minds. З огляду на різні статуї shared by major search engine optimization experts on divers authorized website such as Search Engine Land, Moz, SEO Journal, Digital Marketers India, Hubspot, etc. SEO captures majority of the leads. Also, leads coming from the organic search results have higher conversion rate. Ці статки і consumer behavior Make clearer point that best SEO service is not luxury, but a necesity for any business.
Щобперейти до конкуренції і збільшення бізнесу зростає їх організація потребує використання Search Engine Optimization Services. The big brands can invest enough money for the expert SEO service offered by top SEO company або SEO specialist, але малого бізнесу власників намагаються відповісти на якість цього сервісу до найменшого бюджету. Це досить значний факт малого бізнесу і startups end up leaving the opportunities, які можуть бути створені з професійним SEO service або використовувати cheap SEO service, які мають не позитивні результати.
Невеликі business owners і startups можуть отримати прибутки професійних SEO послуги навіть в обмеженому бюджеті. The best solution is finding a trustworthy SEO company based out of India. В Індії, є багато SEO фахівців, які працюють з цифровим маркетинговим агентством і забезпечать велику індустрію послуг. Вони можуть забезпечити вам необхідні SEO послуги в своєму бюджеті. Засоби можуть бути невідомі з SEO агентства India до того, щоб отримати послуги на низьких rates. However, Дон'т fall for cheap SEO service, що зменшує ганебні і загрожує, щоб зробити більше, як експертизи, які робили на свій власний капітал. You must see portfolio або ask property questions before contracting a company for your business.
SEO experts в Індії є skilled with best practices search engine optimization. Також, є деякі SEO specialists в India так само як Ash Vyas, які спеціально в створенні кращого search engine optimization strategy for business in stated budget. The SEO profesionales буде створювати чіткий план і буде також share what can be the expected results. Це означає, що може бути приємною мірою для вашого investment and returns. Це helps in making a better business decision.
A good idea є find and contract trustworthy SEO company from India, що offers best SEO послуги як soonest as possible. Ви можете також запустити з маленьким бюджетом і обмеженими діями до запуску отримання ваших WebPages indexed and boosting ваші ключові слова в пошукових інструментах. Don't wait for perfect time or a day when you will have thousands dollars to invest in the best SEO services. Starting early will help you get quicker results when you can go aggressive with your marketing approach. A trustworthy SEO компанія заснована на Індії буде help you define your current and future plans to yield good results. Більше indexed pages boosted rankings і credible brand of your business made with continuous professional SEO practices will double inquiries, business, and revenues. Будь-який малий бізнес може запустити з двома digit investment в професійних SEO послуг. Є багато SEO агенцій в Індії, які мають низький бюджет є результат від oriented Search Engine Optimization services.

surveys from exile

  • CraigWew

    12.04.2018

    п'їThe Importance of Establishing Rapport With the Customer в Real Estate and General Sales

    Важливість встановлення rapport with customer.
    Розміщення rapport with customer has to earned and must be approached as very integral part of the sales process.
    У повідомленні, щоб отримати customers and yourself to relate on real one to one basis, involves two things!
    Перший, ви будете думати і бути! Second you must understand that there are two different stages that will occur during this process.
    A-Be there-what does that mean?
    o Most people don’t really listen to another person as they talk. Generally they are so busy formulating their next answer or statement that they couldn't possibly really listen.
    o If this sounds like you, being there means shut up and listen!
    B-What is the first or initial stage?
    o General you have just a few minutes to establish yourself in the customers mind as someone they want to deal with.
    o Коли в цій справі є кращим до перших запитань, що будуть витягнути їх звідти і говорити про нихсам.
    o It is also always safe to appear as a professional-I don't mean stoic or dry, but someone who knows what they are doing and talks and looks the part.
    C-Other stages
    o Як time goes on, through conversation and questions they will have, you will either establish your ability or not.
    o Be aware that they will probably be measuring you for a while. Хороші новини є, що на деякий час, якщо ви повинні бути успішним при встановленні rapport-they буде relax і ви можете бути concentrate on finding або selling the home.
    What else can help me develop rapport?
    o By trying до understand різних типів типів і вони беруть до себе і asking the right questions.
    o Якщо ви маєте гарний rapport (використовувати на тій самій воді, як покупець), то selling є basically over, now it’s just matter of finding the right home or filling out the listing papers.
    What about different personalities
    o Since this is not a book on psychiatry, для котрих є just understand два main types.
    o Там є занедбані і викинуті люди.
    o You know the type. Подумайте про трьох людей, які знають, що fit їх класифікація.
    What sobre body Language and speech patterns?
    o Якщо вони розмовляють швидко або повільно, намагаємося помітити свої частоти.
    o If they talk loud або soft, do the same. Чи є вони підписання або backward?
    o Needless to say, є багато книг, що написані на цьому предметі. Just be aware that it is important factor-especially when you're setting in conference room or at someone's home discussing a $400,000 deal.
    Розвиток rapport is a skill that can be learned and improved upon.
    o Все, що я маю змогу зробити salesson, що я можу скористатися і їсти, щоб бути приємним. The reason is he or she, зробили ви нестерпним комфортом до де ви trusted them.
    How do we develop rapport?
    o Use your eyes and ears and ask questions. To explain
    o Use the eyes:
    o Look at their dress-their car-their індивідуальні поssessions and I mean really look at them and decipher what that tells you about them.
    o Use the ears:
    o Потрібно, щоб вони могли і вирішити питання для того, щоб отримати з їхньої реальної зміни!
    Тепер під час всіх цих речей, вони будуть, можливо, один або два теми, які ви знаєте, що ви маєте в одному з ним. (Family, geographical areas, fishing, etc) Коли ви збираєтеся як загальний персонал, згодом вони знають вашу familiarity і будуть братися до хвилини до розмови з ним.
    What is the Goal?
    o Once they accept you as one of them you're in position to really have a great experience in the sale as you're now working together then as a team-you're no longer the salesman you're now in an advisory position .
    o Remember, the customer either will or will not allow you to enter his world. Якщо ви думаєте про це і реально працює hard to become empathetic with him/her, you can gain a position of trust. In most cases, you will actually see them relax (body language) when this happens you’re on the way.
    o To illustrate this have you ever given speech and noticed that as you finally connected with audience member they will nod in approval. Theth things може all seem trite but they aren’t.
    У closing, якщо ви можете їсти customers trust, selling aproduct or service is much easier and experience can be enoyable for everyone involved.
    Будь-який remember що Win/Win є best situion.

Останнє оновлення: 31.10.2015

Конкатенація

Конкатенація рядків або об'єднання може здійснюватися як за допомогою операції +, так і за допомогою методу Concat:

String s1 = "hello"; string s2 = "world"; string s3 = s1 + "" + s2; //Результат: рядок "hello world" string s4 = String.Concat(s3, "!!!"); // Результат: рядок "hello world!" Console.WriteLine(s4);

Метод Concat є статичним методом класу String, що приймає як параметри два рядки. Також є інші версії методу, які приймають іншу кількість параметрів.

Для об'єднання рядків також може використовуватися метод Join:

String s5 = "apple"; string s6 = "a day"; string s7 = "keeps"; string s8 = "a doctor"; string s9 = "away"; string values ​​= new string (s5, s6, s7, s8, s9); String s10 = String.Join(" ", values); // результат: рядок "apple a day keeps a doctor away"

Метод Join також є статичним. Використана вище версія методу отримує два параметри: рядок-розділювач (у даному випадку пробіл) та масив рядків, які з'єднуватимуться та розділятимуться роздільником.

Порівняння рядків

Для порівняння рядків застосовується статичний метод Compare:

String s1 = "hello"; string s2 = "world"; int result = String.Compare(s1, s2); if (result<0) { Console.WriteLine("Строка s1 перед строкой s2"); } else if (result >0) ( Console.WriteLine("Рядок s1 стоїть після рядка s2"); ) else ( Console.WriteLine("Рядки s1 і s2 ідентичні"); ) // результатом буде "Рядок s1 перед рядком s2"

Ця версія методу Compare приймає два рядки та повертає число. Якщо перший рядок за алфавітом стоїть вище другого, то повертається число менше нуля. В іншому випадку повертається число більше від нуля. І третій випадок - якщо рядки дорівнюють, то повертається число 0.

В даному випадку оскільки символ h за алфавітом стоїть вище символу w, то і перший рядок буде стояти вище.

Пошук у рядку

За допомогою методу IndexOf ми можемо визначити індекс першого входження окремого символу або підрядки у рядку:

String s1 = "hello world"; char ch = "o"; int indexOfChar = s1.IndexOf(ch); // одно 4 Console.WriteLine(indexOfChar); string subString = "wor"; int indexOfSubstring = s1.IndexOf(subString); // одно 6 Console.WriteLine(indexOfSubstring);

Подібним чином діє метод LastIndexOf тільки знаходить індекс останнього входження символу або підрядки в рядок.

Ще одна група методів дозволяє дізнатися, чи починається чи закінчується рядок на певний підрядок. Для цього призначені методи StartsWith та EndsWith. Наприклад, ми маємо завдання видалити з папки всі файли з розширенням exe:

String path = @ "C:\SomeDir"; string files = Directory.GetFiles(path); for (int i = 0; i< files.Length; i++) { if(files[i].EndsWith(".exe")) File.Delete(files[i]); }

Поділ рядків

За допомогою функції Split ми можемо розділити рядок на масив підрядків. Як параметр функція Split приймає масив символів або рядків, які будуть служити роздільниками. Наприклад, підрахуємо кількість слів у терміні, розділивши її за пробельними символами:

String text = "І тому все так сталося"; string words = text.Split(new char("")); foreach (string s in words) ( Console.WriteLine(s); )

Це не найкращий спосіб поділу по пробілах, так як у вхідному рядку у нас могло б бути кілька поспіль пробілів, що йдуть, і в підсумковий масив також би потрапляли прогалини, тому краще використовувати іншу версію методу:

String words = text.Split(new char ( " " ), StringSplitOptions.RemoveEmptyEntries);

Другий параметр StringSplitOptions.RemoveEmptyEntries каже, що треба видалити всі порожні підрядки.

Обрізання рядка

Для обрізання початкових або кінцевих символів використовується функція Trim:

String text = "hello world"; text = text.Trim(); // результат "hello world" text = text.Trim (new char ( "d", "h")); // результат "ello worl"

Функція Trim без параметрів обрізає початкові та кінцеві пробіли та повертає рядок, що обрізає. Щоб явно вказати, які початкові та кінцеві символи слід обрізати, ми можемо передати у функцію масив цих символів.

Ця функція має часткові аналоги: функція TrimStart обрізає початкові символи, а функція TrimEnd обрізає кінцеві символи.

Обрізати певну частину рядка дозволяє функція Substring:

String text = "Гарний день"; // обрізаємо з третього символу text = text.Substring(2); //Результат "роший день" Console.WriteLine(text); // обрізаємо спочатку до двох символів text = text.Substring(0, text.Length - 2); //Результат "роший де" Console.WriteLine(text);

Функція Substring також повертає рядок, що обрізає. Як параметр перша використана версія застосовує індекс, починаючи з якого треба обрізати рядок. Друга версія застосовує два параметри - індекс початку обрізки і довжину частини рядка, що вирізається.

Вставка

Для вставки одного рядка в інший застосовується функція Insert:

String text = "Гарний день"; string subString = "чудовий"; text = text.Insert(8, subString); Console.WriteLine(text);

Першим параметром функції Insert є індекс, за яким треба вставляти підрядок, а другий параметр - власне підрядок.

Видалення рядків

Видалити частину рядка допомагає метод Remove:

String text = "Гарний день"; // Індекс останнього символу int ind = text.Length - 1; // Вирізаємо останній символ text = text.Remove (ind); Console.WriteLine(text); // Вирізаємо перші два символи text = text.Remove (0, 2);

Перша версія методу Remove приймає індекс у рядку, з якого треба видалити всі символи. Друга версія приймає ще один параметр – скільки символів треба видалити.

Заміна

Щоб замінити один символ або підрядок на інший, застосовується метод Replace:

String text = "добрий день"; text = text.Replace("хороший", "поганий"); Console.WriteLine(text); text = text.Replace("про", ""); Console.WriteLine(text);

У другому випадку застосування функції Replace рядок з одного символу "о" замінюється порожнім рядком, тобто фактично видаляється з тексту. Подібним способом легко видаляти певний текст у рядках.

Зміна регістру

Для приведення рядка до верхнього та нижнього регістру використовуються відповідно функції ToUpper() та ToLower() :

String hello = "Hello world!"; Console.WriteLine(hello.ToLower()); // Hello world! Console.WriteLine(hello.ToUpper()); // HELLO WORLD!

Я намагаюся порівняти масив символів із таким рядком:

Const char * var1 = ""; var1 = getenv("myEnvVar"); if(var1 == "dev") ( // do stuff )

Цей оператор if ніколи не перевіряється як істинний... коли я виводжу var1, це "dev" , я думав, може бути, він має якесь відношення до нульової завершується рядку, але strlen "dev" і var1 рівні... Я також подумав, що можливо var1 == "dev" порівнював "dev" з адресою пам'яті var1 замість значення. * var1 == "dev" призводить до помилки.... пробував багато речей, можливо, просте рішення для saavy С++-розробника (я havent кодував С++ в looong час).

змінити: ми пробували

If(strcmp(var1, "dev") == 0)

If(strncmp(var1, "dev", 3) == 0)

edit: після тестування вдома я просто пропоную, щоб мій співробітник змінював тип даних на рядок. Я вважаю, що він порівнював масив char великого розміруз рядком. Я зібрав програму, яка виводить sizeof, strlen і т.д., щоб допомогти нам у цьому. Дякую всім за допомогу.

6 відповідей

Ви не працюєте з рядками. Ви працюєте із вказівниками. var1 є вказівником char (const char*). Це не рядок. Якщо воно завершено нулем, то деякі функції C будуть розглядати його як рядок, але це в основному просто покажчик.

Тому коли ви порівнюєте його з масивом char, масив розпадається на покажчик, а потім компілятор намагається знайти operator == (const char*, const char*) .

Такий оператор існує. Він приймає два покажчика і повертає true , якщо вони вказують на одну і ту ж адресу. Тому компілятор викликає це і ваш код переривається.

Якщо ви хочете виконувати порівняння рядків, ви повинні повідомити компілятор, що хочете мати справу з рядками, а не вказівниками.

Для цього потрібно використовувати функцію strcmp:

Strcmp(var1, "dev");

Це повертає нуль, якщо два рядки рівні. (Він поверне значення більше нуля, якщо ліва сторона лексикографічно більше правої сторони, а значення менше нуля інакше.)

Отже, для порівняння для рівності вам потрібно зробити одне з таких:

If (!strcmp(var1, "dev"))(...) if (strcmp(var1, "dev") == 0) (...)

Однак С++ має дуже корисний клас string. Якщо ми використовуємо це, ваш код стане більш простим. Звичайно, ми могли б створювати рядки з обох аргументів, але нам потрібно зробити це лише з одним із них:

Std::string var1 = getenv("myEnvVar"); if(var1 == "dev") ( // do stuff )

Тепер компілятор зустрічає порівняння між рядком та покажчиком char. Він може впоратися з цим, оскільки покажчик char може бути неявно перетворений на рядок, що дає порівняння рядків та рядків. І вони поводяться точно так, як ви очікували.

У цьому коді ви не порівнюєте строкові значення, ви порівнюєте значення покажчика. Якщо ви хочете порівняти рядкові значення, вам потрібно використовувати функцію порівняння рядків, таку як strcmp.

If (0 == strcmp(var1, "dev")) (..)

"dev" не є string це const char * як var1 . Таким чином ви дійсно порівнюєте адреси пам'яті. Будучи тим, що var1 є вказівником char, * var1 є одиночним char (точніше, першим символом вказаної послідовності символів). Ви не можете порівняти char з вказівником char, тому це не спрацювало.І додайте оголошення до заголовка

// Parameters use "const" for prevent possible object corruption. bool string_equal (const char * arg0, const char * arg1);

Для використання просто помістіть виклик "string_equal" як умову if (або потрійного) оператора/блоку.

If (string_equal (var1, "dev")) ( // It is equal, do what needed here. ) else ( // It is not equal, do what needed here (optional). )



Останні матеріали розділу:

Список відомих масонів Закордонні знамениті масони
Список відомих масонів Закордонні знамениті масони

Присвячується пам'яті митрополита Санкт-Петербурзького та Ладозького Іоанна (Сничева), який благословив мою працю з вивчення підривної антиросійської...

Що таке технікум - визначення, особливості вступу, види та відгуки Чим відрізняється інститут від університету
Що таке технікум - визначення, особливості вступу, види та відгуки Чим відрізняється інститут від університету

25 Московських коледжів увійшли до рейтингу "Топ-100" найкращих освітніх організацій Росії. Дослідження проводилося міжнародною організацією...

Чому чоловіки не стримують своїх обіцянок Невміння говорити «ні»
Чому чоловіки не стримують своїх обіцянок Невміння говорити «ні»

Вже довгий час серед чоловіків ходить закон: якщо назвати його таким можна, цього не може знати ніхто, чому ж вони не стримують свої обіцянки. По...