C#

Strlen в C#: чем заменить и как узнать длину строки

В C# функции strlen нет. Если нужно узнать длину строки, используйте свойство Length: text.Length. Запрос strlen обычно приходит от тех, кто видел C или C++, где длину C-строки получают через функцию strlen. В C# строка — это объект string, и длина хранится в свойстве

Минимальный пример:

string text = "Hello";
Console.WriteLine(text.Length);

Вывод:

5

Почему не strlen

В языке C строка часто представлена как массив символов, который заканчивается нулевым символом. Поэтому функция strlen считает символы до этого маркера. В C# строка устроена иначе: это объект типа string, у которого уже есть свойство Length

Поэтому писать так нельзя:

int size = strlen(text);

Компилятор C# не знает функцию strlen, если вы сами ее не написали. Правильный вариант:

int size = text.Length;

Проверка пользовательского ввода

Если строка приходит от пользователя, учитывайте null и пустой ввод:

Console.Write("Введите имя: ");
string? name = Console.ReadLine();

if (string.IsNullOrWhiteSpace(name))
{
    Console.WriteLine("Имя не введено");
}
else
{
    Console.WriteLine($"Символов: {name.Length}");
}

IsNullOrWhiteSpace проверяет сразу три случая: null, пустую строку и строку из пробелов

Length и кириллица

Для обычных русских слов Length работает ожидаемо:

string city = "Казань";
Console.WriteLine(city.Length);

Результат:

6

Но есть тонкость: Length считает не «визуальные буквы», а элементы UTF-16. Для большинства учебных задач это неважно. Если вы работаете с эмодзи, сложными символами или точной типографикой, потребуется более аккуратная обработка текста. Для проверки имени, пароля, комментария и обычного ввода Length подходит

Безопасный вариант в одну строку

Если строка может быть null, можно получить длину так:

string? text = null;
int length = text?.Length ?? 0;

Console.WriteLine(length);

Оператор ?. пытается взять Length только если строка не null. Оператор ?? подставляет 0, если слева получилось null. Такой код часто используют для необязательных полей: комментария, второго имени, промокода, необязательного описания товара

Если пустая строка и null для вашей задачи означают разные вещи, не сводите их автоматически к нулю. Например, в форме регистрации null может означать, что поле вообще не пришло с клиента, а "" — что пользователь стер значение. Для учебной консольной программы это редко важно, но в API и формах различие бывает полезным

Строка, массив и список

У строки и массива есть Length:

string title = "Order";
int[] numbers = { 1, 2, 3 };

Console.WriteLine(title.Length);
Console.WriteLine(numbers.Length);

У списка List<T> используется Count:

List<string> names = new() { "Анна", "Илья" };
Console.WriteLine(names.Count);

Если написать names.Length, будет ошибка компиляции

Как объяснить это себе коротко

strlen — это привычка из C. Length — привычный путь C#. Если вы пишете C#-код, думайте не «вызвать функцию для строки», а «взять свойство строки». Строка уже знает свою длину, поэтому вы просто обращаетесь к text.Length

Частые ошибки

Первая ошибка — искать strlen в C# и не понимать, почему компилятор ругается. Вторая — вызывать Length у null: text.Length упадет, если строки нет. Третья — путать Length и Count. Четвертая — считать, что Length обрезает строку. Он только возвращает число символов, сама строка не меняется

Мини-задача: спросите у пользователя пароль. Если длина меньше 8 символов, выведите «слишком короткий». Если 8 или больше, выведите «подходит»

Что почитать дальше по C#

Источники: Microsoft String.Length, C# strings

Что почитать дальше по C#

Если нужен общий маршрут по теме, откройте рубрику C#. Для соседних задач пригодятся эти разборы:

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные

Настройки cookie

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x