Как написать программу в си для строк

В этом уроке мы с вами будем обсуждать строки в стиле Си, возможно, вы уже видели эти строки у нас на сайте или в любом другом учебнике. На самом деле, си-строки — это всего лишь массивы символов но, со своей спецификой, таким образом, мы всегда знаем, где конец строки. В этой статье мы рассмотрим несколько функций для работы со строками, например, вы — копирование, конкатенация, получить длину строки.

Что такое строки?

Отметим, что наряду со строками в стиле С, которые, по сути, являются простыми массивами, есть также строковые литералы, такие как этот «literal» . В действительности, что строки, что литералы — это просто наборы символов, расположенных рядом в памяти компьютера. Но между массивами и литералами все таки есть разница, литералы нельзя изменять и строки — можно.

Любая функция, которая принимает строку в стиле С, также может принимать в качестве параметра — литерал. В си также есть некоторые сущности, которые могут выглядеть как строки, хотя, на самом деле, они таковыми не являются. Я сейчас говорю о символах, они заключены в одинарные кавычки, вот пример — ‘а’ , как видите, это не строка. Символ можно, в определенном месте, присвоить строке, но символы не могут быть обработаны в виде строки. Если вы помните, массивы работают как указатели, поэтому, если вы передаете один символ в строку, это будет считаться ошибкой.

Программирование на Си — Урок 9 — символы, строки, библиотеки и печать на русском

Из всего выше сказанного вы должны были понять, что строки — это массивы символов, а строковые литералы — слова, окруженные двойными кавычками. Вот еще один пример литерала:

«Это статическая строка»

Читайте также:
Может ли вредоносная программа попасть на смартфон

Вы еще не забыли про специфику строк, которая упоминалась немного выше? Так вот, Си-строки всегда должны завершаться нулевым символом, буквально — ‘’ . Поэтому, чтобы объявить строку, состоящую из 49 букв, необходимо зарезервировать дополнительную ячейку под нулевой символ:

char myString[50];

Как видно из примера, длинна массива — 50 символов, 49 из которых займет строка и один, последний займет нулевой символ. Важно помнить, что в конце си-строк всегда должен быть нуль-символ, точно так же как и в конце каждого предложения есть точка. Хотя нуль символ не отображается при выводе строки, он все-равно занимает место в памяти.

Поэтому, технически, в массиве из пятидесяти элементов вы смогли бы сохранить только 49 букв, потому что, последний символ нужен для завершения строки. Кроме того, указатели также могут быть использованы в качестве строки. Если вы читали статью про выделение памяти в Си, вы можете сделать нечто подобное:

char *myString; // указатель типа char myString = malloc( sizeof(*myString) * 64 ); // выделение памяти

В этом примере мы выделили 64 ячейки в памяти для массива myString . Для высвобождения памяти воспользуйтесь функцией free() .

free( myString );

Использование строк

Строки полезно использовать тогда, когда вам необходимо выполнять различные операции с текстовой информацией. Например, если вы хотите, чтобы пользователь вводил имя в программу, вы должны использовать строку. Использование функции scanf() для ввода строки — работает, но это может привести к переполнению буфера.

Программирование на Си урок 30: Функции ввода и вывода строк в языке Си

Ведь входная строка может оказаться больше, чем размер строки-буфера. Есть несколько способов для решения этой проблемы, но самый простой способ — это использовать fgets() функцию, которая объявлена в заголовочном файле .

Читайте также:
Для работы с аудиовизуальной информацией можно воспользоваться программой выберите один ответ

Когда fgets() считывает входные данные от пользователя, она будет читать все символы, кроме последнего. После этого в конец считанной строки, fgets() поместит нулевой терминатор. Функция fgets() будет cчитывать символы до тех пор, пока пользователь не нажмет Enter . Давайте посмотрим пример использования fgets() :

#include int main() < char myString[100]; // длинная строка printf( «Введите длинную строку: » ); fgets( myString, 100, stdin ); // считываем из потока ввода строку printf( «Вы ввели следующую строку: %s», myString ); getchar(); >

Первым параметром для fgets() является строка, второй параметр — размер строки и третий параметр — это указатель на входной поток данных.

Результат работы программы:

CppStudio.com

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

Как видите, из вывода программы, во входную строку попал символ новой строки — ‘n’ . Так случилось из-за того, что fgets() считала в строку myString нажатие кнопки Enter и завершила работу. Это означает, что вам может понадобиться вручную удалить символ новой строки. Один из способов сделать это, посимвольный перебор. Давайте доработаем программу и удалим символ новой строки:

#include int main() < char myString[100]; // длинная строка printf( «Введите длинную строку: » ); fgets( myString, 100, stdin ); // читываем из потока ввода строку int i; for ( i = 0; i < 100; i++ ) < if ( myString[i] == ‘n’ ) < myString[i] = ‘’; break; >> printf( «Вы ввели следующую строку: %s», myString ); getchar(); >

Обратите внимание, что если входная строка содержит меньше 100 символов, то в строку попадет и символ новой строки. Поэтому мы можем удалить этот символ, используя простой перебор. В программу мы добавили цикл, в котором перебираем символы строки, строки 12-19. И когда нам встречается символ новой строки, мы его заменяем нулевым символом, строка 16. Результат работы программы:

Читайте также:
Программа которая преобразует коды в символы

CppStudio.com

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

На этом пока все. В следующей статье я расскажу вам о специальных функциях для работы со строками.

#include
void main()
char c[80]; /* Объявляем строку как массив из 80 символов */
clrscr();
puts(«Input string:»); /* Выводим сообщение на экран */
gets(c); /* Считываем строку с клавиатуры */
puts(c); /* Выводим полученную строку на экран */
>

#include
#include
void main()
char s1[80], s2[80];
int z;
clrscr();
puts(«Input string1:»);
gets(s1); /* вводим строку 1 */
puts(«Input string2:»);
gets(s2); /* вводим строку 2 */
z = strlen(s1); /* Вычисляем длину строки s1 */
printf(«Dlina S1=%d n»,z);
strcat(s1,s2); /* Складываем две строки */
printf(«S1 + S2 =%s n»,s1);
z = strlen(s1); /* Вычисляем длину результирующей строки */
printf(«Dlina S1=%d n»,z);
>
Результат работы программы будет такой:

#include
#include
void main()
char s1[80];
int n,z,q;
clrscr();
puts(«Input string:»);
gets(s1); /* Вводим произвольную строку (не более 80 символов) */
printf(«S1=%s n»,s1);
z = strlen(s1); /* Вычисляем длину введённой строки */
q = 0; /* Обнуляем счётчик символов «а» */
/* Создаём цикл для сканирования строки */
for (n=0; n if (s1[n] == ‘a’) q++; /* Если очередной символ равен «а», то увеличиваем счётчик на единицу */
>
printf(«Sibols a=%d»,q); /* Выводим число найденных символов «а» на экран */
>

Результат работы программы:

Источник: hi-intel.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru