Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Определение длины строки




Длина строки не обязательно должна совпадать с длиной массива. Например, вы можете определить массив name, который содержит 20 элементов, но ввести в него имя, состоящее из меньшего числа символов. Большинство компиляторов Си и Си++ имеют функцию strlen(), которая позволяет определить количество символов, действительно содержащееся в строке:

gets(name);count = strlen(name);printf("Строка %s содержит %d символов", name, count);

Функция присваивает значение, отражающее количество символов во введенной строке (в нашем случае она называется name), целочисленной переменной count. Без использования функции strlen() ту же процедуру можно выполнить с помощью следующих инструкций:

main() { int index; char name[10]; gets(name); for (index = 0; index < 10; index++) { if (name[index] == '\0') break; } printf("%d", index); }

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

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

main() { char name[10]; int index, count; gets(name); count = strlen(name); for (index = count; index > 0; index--) putchar(name[index-1]); putchar('\n'); }

Здесь значение длины строки используется в качестве индекса в условии цикла for, причем значение его уменьшается при каждом повторе цикла. Если строка содержит 5 символов, цикл будет повторен 5 раз, изменяя значение переменной index от 5 до 1. Так как элементы такого массива имеют номера от 0 до 4, то, чтобы получить номер элемента, из значения переменной index вычитается единица.

Присваивание строк

Язык Си не позволяет непосредственно присваивать символы строке, используя инструкции вроде

name = "Сэм";

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

strcpy(name, "Сэм");strcpy(name, name1);

В первом примере символы "Сэм" присваиваются строковой переменной с именем name. Во втором примере символы, которые уже были присвоены переменной name1, копируются в переменную name.

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

char name[] = "Алан";main() { char person[10]; int count, index; count = strlen(name); for (index = 0; index <= count; index++) person[index] = name[index]; puts(person); }

В этой программе происходит присваивание символьных значений одного массива соответствующим элементам другого массива.


Рис. 9. Синтаксис функции strcat()

 

Замечания по Си++
Благодаря перегрузке язык Си++ допускает использование оператора + для сложения двух строк с помощью инструкции:   new_string = string1 + string2;

 

Слияние строк

Процедура слияния двух строк состоит в том, что символы, содержащиеся в одной строке, добавляются в конец другой, сдвигая нулевой символ. Этот процесс называется конкатенацией (concatenation). В стандарте языка Си K&R определена функция strcat(), работа которой продемонстрирована на рис. 9. Символы из строки, которая передается функции в качестве второго параметра, добавляются в конец строки, передаваемой в качестве первого параметра.

Массивы строк

Можно организовать массив строк точно так же, как массив данных любого другого типа. Но массив строк, по сути, будет являться уже массивом массивов символов. Массив, элементы которого сами являются массивами, называется двухмерным массивом.

Двухмерный массив можно представить себе как таблицу, имеющую ряды и колонки. Такой массив следует определять с двумя индексами, один из которых определяет количество рядов таблицы, а второй устанавливает количество колонок. Ниже приведены инструкции, определяющие массив, имеющий 10 рядов и 20 колонок, то есть содержащий 200 целочисленных переменных:

int table[10][20];

Представим себе каждый элемент как целое число, занимающее собственную


Рис. 10. Определение массива строк

клеточку в таблице 10х20. Элемент table[0][0] находится в левом верхнем углу таблицы, а элемент table[0][1] занимает соседнюю клетку справа в том же ряду.

Определяя массив строк, также необходимо использовать два индекса. Первый определяет максимальное количество строк в массиве, а второй указывает максимальную длину каждой строки. Таким образом, определение

char names[10][20];

задает десять строковых переменных names длиной не больше 19 символов в каждой (рис.10).

Если вы хотите задавать строки путем ввода значений отдельных символов, следует использовать вложенные циклы. Внешний цикл будет повторяться 10 раз, по одному на каждую строку, а внутренний должен иметь 19 повторов для ввода значений одной строки. На рис. 11 приведена программа, в которой вводятся значения 10 имен (строковых переменных) в массив, а затем все эти 10 строк с помощью цикла for последовательно выводятся на экран.

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

name[index][index2] = letter;

Первый индекс указывает номер нужной строки внутри массива, а второй определяет позицию символа внутри строки. Например, на рис. 12 элемент name[0][3] является четвертым символом (буква м) первой строки ("Адам") в


Рис. 11. Программирование массива строк

 


Рис. 12. Строки и элементы массива строк

массиве имен. Чтобы вывести на экран строку целиком, нужен только один индекс, указывающий номер строки:

puts(name[index]);

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






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных