Как мне узнать количество символов в строке на C ++?
c++
string
stdstring
string-length
Эллиот
источник
источник
Ответы:
Если вы используете A
std::string
, позвонитеlength()
:Если вы используете c-строку, позвоните
strlen()
.Или, если вам нравится использовать строки в стиле Паскаля (или чертовы строки, как Джоэл Спольски любит называть их, когда они имеют завершающий NULL), просто разыменуйте первый символ.
источник
std::size_t
.При работе со строками C ++ (std :: string) вы ищете length () или size () . Оба должны предоставить вам одинаковую ценность. Однако при работе со строками в стиле C вы должны использовать strlen () .
Вывод:
источник
Это зависит от того, о каком типе струны вы говорите. Есть много типов струн:
const char*
- многобайтовая строка в стиле Cconst wchar_t*
- широкая струна C-стиляstd::string
- «стандартная» многобайтовая строкаstd::wstring
- «стандартная» широкая струнаДля 3 и 4 вы можете использовать
.size()
или.length()
методы .Для 1 вы можете использовать
strlen()
, но вы должны убедиться, что строковая переменная не равна NULL (=== 0)Для 2 вы можете использовать
wcslen()
, но вы должны убедиться, что строковая переменная не равна NULL (=== 0)В нестандартных библиотеках C ++ есть и другие строковые типы, такие как MFC
CString
, ATLCComBSTR
, ACEACE_CString
и т. Д., С такими методами, как.GetLength()
и т. Д. Я не могу сразу вспомнить их специфику.Библиотеки STLSoft абстрагировали все это с помощью так называемых прокладок доступа к строке , которые можно использовать для получения длины строки (и других аспектов) любого типа. Итак, для всего вышеперечисленного (включая нестандартные библиотечные) используется одна и та же функция
stlsoft::c_str_len()
. В этой статье описывается, как все это работает, поскольку это не совсем очевидно или просто.источник
Для Юникода
Несколько ответов здесь были адресованы, что
.length()
дает неправильные результаты с многобайтовыми символами, но есть 11 ответов, и ни один из них не дал решения.Дело Za̴͕̲̒̒͌̋ͪl̨͎̰̘͉̟ͤ̀̈̚͜g͕͔̤͖̟̒͝ͅo
Прежде всего, важно знать, что вы подразумеваете под словом «длина». В качестве мотивирующего примера рассмотрим строку «Z͉̳̺ͥͬ̾a̴͕̲̒̒͌̋ͪl̨͎̰̘͉̟ͤ̀̈̚͜g͕͔̤͖̟̒͝ͅo» (обратите внимание, что в некоторых языках, особенно в тайском, на самом деле используются комбинированные диакритические знаки, так что это полезно не только для мемов 15-летней давности, но, очевидно, это наиболее важный вариант использования) . Предположим, он закодирован в UTF-8 . Есть 3 способа определить длину этой строки:
95 байт
50 кодовых точек
5 графем
Определение длины в отделении интенсивной терапии
Существуют классы C ++ для ICU, но они требуют преобразования в UTF-16. Вы можете использовать типы и макросы C напрямую, чтобы получить некоторую поддержку UTF-8:
Это печатает:
Boost.Locale обертывает ICU и может обеспечить более приятный интерфейс. Однако он по-прежнему требует преобразования в / из UTF-16.
источник
Если вы используете старую строку в стиле C вместо более новых строк в стиле STL,
strlen
в библиотеке времени выполнения C есть функция:источник
если вы используете std :: string, для этого есть два общих метода:
если вы используете строку стиля C (используя char * или const char *), вы можете использовать:
источник
.length и .size являются синонимами, я просто думаю, что «длина» - более ясное слово.
источник
источник
для фактического строкового объекта:
или
источник
В C ++ std :: string методы length () и size () дают вам количество байтов, а не обязательно количество символов!. То же самое с функцией sizeof () c-Style!
Для большинства печатаемых 7-битных символов ASCII это одно и то же значение, но для символов, не являющихся 7-битными ASCII, это определенно не так. См. Следующий пример, чтобы получить реальные результаты (64-разрядная версия Linux).
Не существует простой функции c / c ++, которая действительно могла бы подсчитать количество символов. Кстати, все это зависит от реализации и может отличаться в других средах (компилятор, win 16/32, linux, встроенный, ...)
См. Следующий пример:
Результат примера таков:
источник
Это может быть самый простой способ ввести строку и найти ее длину.
источник
Самый простой способ получить длину строки, не беспокоясь о пространстве имен std, выглядит следующим образом
строка с / без пробелов
строка без пробелов
источник