Строки и строковые функции

  1. строка
  2. Объем памяти:
  3. Строковые функции
  4. стрлен (строка)
  5. strcpy (dest, source)
  6. strcmp (str1, str2)
  7. strstr (str1, str2)

строка

Строка в C на самом деле является символьным массивом. Поскольку отдельная символьная переменная может хранить только один символ, нам нужен массив символов для хранения строк. Таким образом, в C строка хранится в массиве символов. Каждый символ в строке занимает одно место в массиве. Нулевой символ '\ 0' ставится после последнего символа. Это сделано для того, чтобы программа могла определить, когда был достигнут конец строки. Например, строка «Hello» сохраняется следующим образом.

Так как строка содержит 5 символов. для его хранения требуется массив символов размером 6. последний символ в строке всегда является символом NULL ('\ 0'). Всегда имейте в виду, что '\ 0' не входит в длину, если строка, поэтому здесь длина строки только 5. Обратите внимание, что индексы строки начинаются с 0, а не с одного, поэтому не путайте себя с индексом и длиной строки.

Таким образом, в C строка представляет собой одномерный массив символов, оканчивающийся нулевым символом. Завершающий нулевой символ важен. На самом деле, строка, не оканчивающаяся на \ 0, на самом деле не строка, а просто набор символов . Строка может содержать любой символ, включая специальные управляющие символы, такие как \ n, \ t, \ etc ...
Существует важное различие между строкой и одним символом в C. Соглашение состоит в том, что одиночные символы заключаются в одинарные кавычки, например ' ', и имеют тип char. Строки, с другой стороны, заключены в двойные кавычки, например «name», и имеют тип «pointer to char» (char ) или массив char.

Строки могут быть объявлены двумя основными способами; один из них - как массив символов, другой - как указатель на некоторый предварительно назначенный массив.
Возможно, самый простой способ увидеть, как С хранит массивы, - это привести крайний пример, который, вероятно, никогда не будет использован на практике.

#include <stdio.h> int main () {char str [20]; ул [0] = 'Я'; ул 1 знак равно ул 2 = 'L'; ул 3 = 'О'; ул [4] = 'v'; str [5] = ''; ул [6] = 'С'; ул [7] = 'о'; ул [8] = 'D'; ул [9] = 'я'; ул [10] = 'п'; str [11] = 'g' printf ("% s", str); вернуть 0; }
Выход
Я люблю кодировать

Этот метод обработки строк вполне приемлем, если вы тратите время впустую, но он настолько трудоемок, что C предоставляет специальный сервис инициализации для строк, который обходит необходимость присваивать каждому отдельному символу новое присваивание.
Другой способ - использовать указатель на некоторый предварительно назначенный массив. Назначение str2 имеет тип указателя.

#include <stdio.h> int main () {char str1 [] = ”Мне нравится”; char * str2 = «Программирование на C»; Е (»% s \ п», str1); Е (»% s \ п», str2); вернуть 0; }

Выход

Мне нравится C Программирование

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

char str [100]; зсапЕ ( "% s", ул);

Объем памяти:

Поскольку мы знаем, что каждый символ занимает 1 байт, длина строки L будет иметь размер L байт. Всегда имейте в виду, что каждый из символов в строке хранится в последовательной памяти
место нахождения.

Поскольку C не имеет встроенных средств для манипулирования целыми массивами (их копирования, сравнения и т. Д.), Он также имеет очень мало встроенных средств для работы со строками.
Фактически, единственная действительно встроенная обработка строк в C состоит в том, что она позволяет нам использовать строковые константы (также называемые строковыми литералами) в нашем коде. Всякий раз, когда мы пишем строку, заключенную в двойные кавычки, C автоматически создает для нас массив символов, содержащий эту строку, оканчивающуюся символом '\ 0'.
Например, мы можем объявить и определить массив символов и инициализировать его строковой константой:

char string [] = "Привет, мир!";
В этом случае мы можем не указывать размерность массива, поскольку компилятор может вычислить его для нас на основе размера инициализатора (14, включая пробелы и символ NULL ('\ 0')). Однако это единственный случай, когда компилятор определяет для нас размер массива строк; в других случаях необходимо, чтобы мы сами решили, насколько велики массивы и другие структуры данных, которые мы используем для хранения строк.
* -Всегда хорошо инициализировать строку с некоторым размером ларега по сравнению с наибольшим размером строки, указанным в задаче. *

Чтобы сделать что-то еще со строками, мы обычно должны вызывать функции. Библиотека C содержит несколько основных функций для работы со строками, и чтобы узнать больше о строках, мы рассмотрим, как эти функции могут быть реализованы.

Строковые функции

#include <string.h> включите эту библиотеку в вашу программу, чтобы использовать некоторые из встроенных функций манипуляции со строками, присутствующих в библиотеке.

в этой библиотеке присутствует около 20-22 встроенных функций для работы со строками.
Наиболее распространенные функции, используемые в библиотеке:
1. strlen ("имя строки")
2. strcpy (dest, source)
3. strcmp (строка1, строка2)
4. strstr (str1, str2)

стрлен (строка)

Объявление и использование функции strlen ()

Это одна из самых полезных функций, используемых в этой библиотеке, когда нам нужна длина строки, скажем «str1»
мы пишем это как

int len; len = strlen (str1); len будет длиной строки "str1". (она будет включать все пробелы и символы в строке, кроме символа NULL ('\ 0').

strcpy (dest, source)

Эта функция копирует строку «source» в строку «dest».
декларация

strcpy (str2, str1);
Возвращаемое значение
Это возвращает указатель на целевую строку dest.

пример
Ниже приведен код использования функции strcpy ().

#include <stdio.h>
#include <string.h> int main () {char str1 [] = "Я люблю программирование"; char str2 [20] = ""; printf ("исходная строка (т. е. str1) =% s \ n", str1); printf ("строка dest (т. е. str2) =% s \ n", str2); strcpy (str2, str1); printf ("target (то есть str2) строка после strcpy () =% s \ n", str2); вернуть 0; } Вывод
исходная строка (т. е. str1) = я люблю программировать. dest string (т. е. str2) = целевая (т. е. str2) строка после strcpy () = я люблю программировать, также легко скопировать одну строку в другую с помощью цикла for, как int i, Len; Len = STRLEN (str1); для (i = 0; i <len; i ++) {str2 [i] = str1 [i]; } // последний индекс в строке был len-1 // теперь снаружи для значения цикла i = len. str2 [я] = '\ 0'; // никогда не забывайте завершать строку с помощью «\ 0».

Любой способ хорош для копирования, но использование strcpy - хорошая привычка.

strcmp (str1, str2)

Эта функция используется для сравнения двух строк "str1" и "str2". эта функция возвращает ноль ("0"), если две сравниваемые строки равны, иначе некоторые не имеют нулевого целого числа.
Объявление и использование функции strcmp ()

strcmp (str1, str2); // объявление // с использованием этой функции для проверки того, что две строки равны или нет. if (strcmp (str1, str2) == 0) {printf ("строка% s и строка% s равны \ n", str1, str2); } else printf («строка% s и строка% s не равны \ n», str1, str2);
Возвращаемое значение
- if Возвращаемое значение if
- если Возвращаемое значение, если> 0, то это означает, что str2 меньше, чем str1
- если Возвращаемое значение, если = 0, то это указывает, что str1 равен str2
Обычный подход для сравнения двух строк - void Compare (char str1 [], char str2 []) {int l1, l2, i; l1 = StrLen (str1); l2 = StrLen (str2); if (l1! = l2) {printf («строка% s и строка% s не равны \ n», str1, str); } else {for (i = 0; i <l1; i ++) {// l1 или l2 любой, поскольку оба равны. if (str1 [i]! = str2 [i]) {printf («строка% s и строка% s не равны \ n», str1, str); перерыв; }} if (i == l1) {// если цикл for работал на протяжении всего l1. printf («строка% s и строка% s равны \ n», str1, str); }}} Вы сами видите, что первый подход сравнения всегда лучше и экономит время.

strstr (str1, str2)

Эта библиотечная функция находит первое вхождение подстроки str2 в строке str1. Завершающий символ '\ 0' не сравнивается.
декларация

strstr (str1, str2); - str1: основная строка для сканирования. - str2: маленькая строка для поиска в str1.
// скажем скажем str2 = "speed"; // функция также может быть записана как strstr (str1, "speed"); Эта функция очень полезна для проверки, является ли str2 подстрокой str1 или нет.
Возвращаемое значение
Эта функция возвращает указатель на первое вхождение в строке str1 любой последовательности символов, указанной в строке str2, или указатель NULL, если последовательность отсутствует в строке str1.

пример
Ниже приведен код использования функции strstr ().

#include <stdio.h>
#include <string.h> int main () {char str1 [55] = "Это тестовая строка для тестирования"; char str2 [20] = "test";
char * p; p = strstr (str1, str2); if (p) {printf ("найдена строка \ n"); // т.е. str2 является подстрокой str1. printf ("Первое вхождение строки \" test \ "в \"% s \ "- это" \ "\"% s \ "", str1, p); } else printf ("строка не найдена \ n"); // str2 не является подстрокой str1. вернуть 0; } Найдена выходная строка Первое появление строки «test» в «Это тестовая строка для тестирования» - «тестовая строка для тестирования»

Выше объяснены две функции strcpy () и strcmp () также могут быть расширены до n символов следующим образом:

strncpy (dest, source, n) Копирует до n символов из указанной строки, от источника к dest.
strncmp (str1, str2, n) Сравнивает не более первых n байтов str1 и str2.

для ссылки на другие функции в библиотеке <string.h> перейдите к string.h

Похожие

Что нового в следующем сборнике Redstone 5 в Skip Ahead (17639)
... strong>Windows 10 Redstone 4 (Spring Creators Update) подошла к концу. Тем временем импульс набирает обороты на Redstone 5 . Новый сборник с номером появился вчера в Skip Ahead 17639 , Мы уже упоминали новые предметы в функции
Как использовать Google Drive в Linux
Когда Google представил Google Drive 24 апреля 2012 года, они пообещали, что поддержка Linux «появится в ближайшее время». Это было почти пять лет назад. Google до сих пор не выпустил официальную версию Google Drive для Linux, но есть и другие инструменты, чтобы заполнить этот пробел.
Супер-Легкие Анимированные Эффекты с JQuery
Одна из замечательных особенностей jQuery - смехотворно легко анимировать элементы страницы. В то время как раньше вам приходилось возиться с setTimeout () или setInterval () и множество JavaScript-кода, с помощью jQuery вы можете творить чудеса, используя всего одну или две строки кода. В этом уроке мы рассмотрим некоторые из наиболее распространенных эффектов, которые вы можете достичь
Как сбросить системный пароль Android (пароль блокировки экрана) от Dr.fone
... функции Dr.Fone Toolkit В Dr.Fone есть много других функций, помимо сброса паролей на Android и пропустить экран блокировки Android они все его покупают, даже дороже. восстановление данных iOS
Синхронизация данных: облачное хранилище в тесте
Данные, хранящиеся в облачных сервисах, легко доступны для совместного использования и всегда доступны на всех ваших устройствах. Тем не менее, между Google Drive, OneDrive, iCloud и co существуют заметные различия в функциональности и ценах. Точное сравнение отдельных услуг уместно.  Облачный провайдер в сравнении. (Источник: netzwelt) Падающие цены на носители для передачи и хранения
Что за игровой ноутбук? руководство
... strong>Решение? Ищите доступный, но эффективный игровой ноутбук. Хороший игровой ноутбук или как? ASUS ROG Strix GL553VE / фото: mobiManiaK.pl Тот факт,
Исправить Android не включается или застревает на экране логотипа Samsung
Когда Android не включается, мы чувствуем себя довольно ограниченными в устранении неполадок, но телефон с мягким замком не предлагает много вариантов, когда дело доходит до устранения неполадок. Позвольте нам выяснить причины, по которым это может произойти с вашим устройством, и что делать, если ваш Android не включится или застрянет

Комментарии

У вас на телефоне установлен Android KitKat (4.4.x), и вы заметили какие-либо проблемы с внешней картой памяти?
У вас на телефоне установлен Android KitKat (4.4.x), и вы заметили какие-либо проблемы с внешней картой памяти? Google изменил некоторые настройки, касающиеся карт памяти, что вызывает проблемы с сохранением данных, но вы можете их исправить. У людей с Android 4.4.x могут возникнуть проблемы с сохранением файлов на карту памяти или установкой приложений на SD-карту. Это связано с ограничениями прав записи и чтения на карту, которые были введены Google вместе с выпуском
Конечно, в галереях продуктов или на веб-сайтах, представляющих определенные функции, фотографии необходимы для иллюстрации, но требует ли их каждый веб-сайт так много?
Конечно, в галереях продуктов или на веб-сайтах, представляющих определенные функции, фотографии необходимы для иллюстрации, но требует ли их каждый веб-сайт так много? вид как объем данных, передаваемых веб-сайтами, увеличился за последние годы. Удивительно, что средний размер страницы превышает 2 МБ. Использовать CSS Возможность использовать CSS позволяет отказаться от большинства изображений,
Какие функции отсутствуют в iPad, что мешает вам использовать его для написания проектов?
Какие функции отсутствуют в iPad, что мешает вам использовать его для написания проектов? Узнайте больше о: Evernote , Приложения для заметок , Написание Советы ,
Какие функции есть за пределами?
Какие функции есть за пределами? Стоит ли платная подписка? Лучшее бесплатное предложение Здесь стоит подписка

Strong>Решение?
Хороший игровой ноутбук или как?
У вас на телефоне установлен Android KitKat (4.4.x), и вы заметили какие-либо проблемы с внешней картой памяти?
Конечно, в галереях продуктов или на веб-сайтах, представляющих определенные функции, фотографии необходимы для иллюстрации, но требует ли их каждый веб-сайт так много?
Какие функции отсутствуют в iPad, что мешает вам использовать его для написания проектов?
Какие функции есть за пределами?
Стоит ли платная подписка?