Хелпикс

Главная

Контакты

Случайная статья





результат



 

Одномерные[E1] [E2] массивы используются для создания символьных строк. В языке C/C++ строка определяется как символьный массив, который завершается нулевым символом ('\0'). При определении длины символьного массива необходимо учитывать признак её завершения и задавать его длину на единицу больше длины самой большой строки из тех, которые предполагается хранить в этом массиве.

Например, объявляя массив str, предназначенный для хранения 10­символьной строки, следует использовать следующую инструкцию.

char str[11];

Заданный[E3] здесь размер (11) позволяет зарезервировать место для нулевого символа в конце строки.

Язык C/C++ позволяет определять строковые литералы, которые представляют собой список символов, заключённый в двойные кавычки. Вот несколько примеров.

"Привет"

"Мне нравится С++"

« »

Строка[E4] , приведенная последней (""), называется нулевой. Она состоит только из одного нулевого символа (признака завершения строки). Нулевые строки используются для представления пустых строк.

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

Проще всего считать строку с клавиатуры, создав массив, который примет эту строку с помощью инструкции cin. Считывание строки, введённой пользователем с клавиатуры, отображено в следующей программе.

#include <iostream>

using namespace std;

int main() {

char str[80];

cout << "Введите строку: ";

cin >> str; // Считывание строку с клавиатуры.

cout << "Вот ваша строка: " << str; return 0;

Несмотря на то, что эта программа формально корректна, она не лишена недостатков. Если запустить программу на выполнение, то результат будет такой.

Введите строку: Это проверка

Вот ваша строка: Это

Как видно из примера, при выводе строки, введённой с клавиатуры, программа отображает только слово "Это", а не всю строку. Дело в том, что оператор ">>" прекращает считывание строки, как только встречает символ пробела, табуляции или новой строки.

Для решения этой проблемы можно использовать ещё одну библиотечную функцию gets(). Общий формат её вызова таков:

gets[E5] (имямассива);

Если в программе необходимо считать строку с клавиатуры, то следует вызвать функцию gets(), а в качестве аргумента передать имя массива, не указывая индекса. После выполнения этой функции заданный массив будет содержать текст, введённый с клавиатуры. Функция gets()считывает вводимые пользователем символы до тех пор, пока он не нажмёт клавишу <Enter>. Для вызова функции gets()в программу необходимо включить заголовок <cstdio>.

В следующей версии предыдущей программы демонстрируется использование функции gets(), которая позволяет ввести в массив строку символов, содержащую пробелы.

#include <iostream>

#include <cstdio>

using namespace std;

int main() {

char str[80];

cout << "Введите строку: "; gets(str); // Считываем строку с клавиатуры. cout << "Вот ваша строка: " << str;

return 0;

}

результат

Введите строку: Это простой тест

Вот ваша строка: Это простой тест

При вводе строки символов следует иметь ввиду, что ни оператор ">>", ни функция gets()не выполняют граничной проверки (на отсутствие нарушения границ массива). Поэтому, если пользователь введёт строку, длина которой превышает размер массива, возможны неприятности. Из этого следует, что оба варианта считывания строк с клавиатуры потенциально опасны.

Язык C/C++ поддерживает множество функций обработки строк. Самыми распространёнными из них являются следующие:

strcpy()

strcat()

strlen()

strcmp()

Для вызова всех этих функций в программу необходимо включить заголовок <cstring>. Ниже представлено описание функций обработки строк.

Функция strcpy()

Общий формат вызова функции strcpy()таков:

strcpy(to, from);

Функция strcpy()копирует содержимое строки from в строку to. При вызове этой функцией следует иметь в виду, что массив, используемый для хранения строки to, должен быть достаточно большим, чтобы в него можно было поместить строку из массива from. В противном случае массив to переполнится, т.е. произойдёт выход за его границы, что может привести к разрушению программы.

Использование функции strcpy()демонстрируется в следующей программе, которая копирует строку "Привет" в строку str.

#include <iostream>

#include <cstring>

using namespace std;

int main() {

char str[80];

strcpy(str, "Привет");

cout << str; return 0;

}

Функция strcat()

Обращение к функции strcat()имеет следующий формат.

strcat(s1, s2);

Функция strcat()присоединяет строку s2 к концу строки s1; при этом строка s2 не изменяется. Обе строки должны завершаться нулевым символом. Результат вызова этой функции, т.е. результирующая строка s1 также будет завершаться нулевым символом.

Использование функции strcat()демонстрируется в следующей программе, которая должна вывести на экран строку "Привет всем!".

#include <iostream>

#include <cstring>

int main(){

char s1[20], s2[10];

strcpy(s1, "Привет");

strcpy(s2, " всем!");

strcat (s1, s2);

std::cout << s1;

return 0;

}

Функция strcmp()

Обращение к функции strcmp()имеет следующий формат:

strcmp(s1, s2);

Функция strcmp()сравнивает строку s2 со строкой s1 и возвращает значение 0, если они равны. Если строка s1 лексикографически (т.е. в соответствии с алфавитным порядком) больше строки s2, возвращается положительное число. Если строка s1 лексикографически меньше строки s2, возвращается отрицательное число.

Использование функции strcmp()демонстрируется в следующей программе, которая служит для проверки правильности пароля, введенного пользователем.

#include <iostream>

#include <cstring>

#include <cstdio>

int main(){

char s[80];

std::cout << "Введите пароль: ";

gets(s);

if(strcmp(s, "пароль"))

std::cout << "В доступе отказано.\n";

else

std::cout << "Вход разрешен.\n";

return 0;

}

При использовании функции strcmp()важно помнить, что она возвращает число 0 (т.е. значение false), если сравниваемые строки равны. Следовательно, если необходимо выполнить определенные действия при условии совпадения строк, следует использовать оператор (!).

Функция strlen()

Общий формат вызова функции strlen()таков:

strlen(s);

Функция strlen()возвращает длину строки, указанной аргументом s.

При выполнении следующей программы будет показана длина строки, введенной с клавиатуры.

#include <iostream>

#include <cstdio>

#include <cstring>

int main(){

char str[80] ;

std::cout << "Введите строку: ";

gets(str); std::cout << "Длина строки равна: " << strlen(str); return 0;

}

Если пользователь введёт строку "Привет всем!", программа выведет на экране число 12. При подсчёте символов, составляющих заданную строку, признак завершения строки (нулевой символ) не учитывается.

Факт завершения нулевыми символами всех С/С++-строк можно использовать для упрощения различных операций над ними. Следующий пример позволяет убедиться в том, насколько простой код требуется для замены всех символов строки их прописными эквивалентами.

#include <iostream>

#include <cstring>

#include <cctype>

int main() {

char str[80];

strcpy(str, "test"); for(int i=0; str[i]; i++) str[i] = toupper(str[i]);

std::cout << str;

return 0;

}

Эта программа при выполнении выведет на экран слово "TEST". Здесь используется библиотечная функция toupper(), которая возвращает прописной эквивалент своего символьного аргумента. Для вызова функции toupper()необходимо включить в программу заголовок <cctype>.

Следует обратить внимание на то, что в качестве условия завершения цикла forиспользуется массив str, индексируемый управляющей переменной i(str[i]). Такой способ управления циклом вполне приемлем, поскольку за истинное значение в языке C/C++ принимается любое ненулевое значение. Поскольку, все печатные символы представляются значениями, не равными нулю, и только символ, завершающий строку, равен нулю. Следовательно, этот цикл работает до тех пор, пока индекс не укажет на нулевой признак конца строки, т.е. пока значение str[i]не станет нулевым.

 

 

 

 

 

 

 

[E1]

[E2]

[E3]

[E4]

[E5]



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.