Как получить количество символов в станд.:: строка?

Я понимаю, что этому вопросу больше года, но я только столкнулся с той же проблемой и подумал, что добавлю свое решение для всех, кто сталкивается с этой проблемой.

Если у вас есть последовательность имен пользователей и паролей, которые просто дифференцируются по номерам в конце их значений, вы можете использовать переменную __threadNum для их входа в систему. Поэтому для значения имени пользователя вы можете сказать user $ {__ threadNum} .

Это решение проще, чем включение CSV, но работает только тогда, когда у вас есть список, такой как тот, который вы предложили в своем вопросе.

108
задан jww 26 December 2017 в 21:07
поделиться

8 ответов

Если вы используете std :: string , вызовите length () :

std::string str = "hello";
std::cout << str << ":" << str.length();
// Outputs "hello:5"

Если вы используете c-строку , вызовите strlen () .

const char *str = "hello";
std::cout << str << ":" << strlen(str);
// Outputs "hello:5"

Или, если вам нравится использовать строки в стиле Паскаля (или чертовы строки, как Джоэл Спольски любит называть их , когда они имеют завершающий NULL), просто разыменуйте первый символ.

const char *str = "\005hello";
std::cout << str + 1 << ":" << *str;
// Outputs "hello:5"
170
ответ дан 24 November 2019 в 03:30
поделиться

При работе со строками C ++ (std :: string) вы ищете length () или размер () . Оба должны предоставить вам одинаковую ценность. Однако при работе со строками в стиле C вы должны использовать strlen () .

#include <iostream>
#include <string.h>

int main(int argc, char **argv)
{
   std::string str = "Hello!";
   const char *otherstr = "Hello!"; // C-Style string
   std::cout << str.size() << std::endl;
   std::cout << str.length() << std::endl;
   std::cout << strlen(otherstr) << std::endl; // C way for string length
   std::cout << strlen(str.c_str()) << std::endl; // convert C++ string to C-string then call strlen
   return 0;
}

Вывод:

6
6
6
6
21
ответ дан 24 November 2019 в 03:30
поделиться

Это зависит от того, о каком типе строки вы говорите. Есть много типов строк:

  1. const char * - многобайтовая строка в стиле C
  2. const wchar_t * - широкая строка в стиле C
  3. std :: string - «стандартная» многобайтовая строка
  4. std :: wstring - «стандартная» широкая строка

Для 3 и 4 вы можете использовать .size () или .length () методы.

Для 1 вы можете использовать strlen () , но вы должны убедиться, что строковая переменная не имеет значения NULL (=== 0)

Для 2 вы можно использовать wcslen () , но вы должны убедиться, что строковая переменная не имеет значения NULL (=== 0)

В нестандартных библиотеках C ++ есть и другие строковые типы, такие как MFC CString , ATL CComBSTR , ACE ' s ACE_CString и т. д. с помощью таких методов, как .GetLength () и т. д. Я не могу сразу вспомнить их специфику.

Библиотеки STLSoft абстрагировали все это с помощью так называемых прокладок доступа к строкам , которые может использоваться для получения длины строки (и других аспектов) любого типа. Итак, для всего вышеперечисленного (включая нестандартные библиотечные) используется одна и та же функция stlsoft :: c_str_len () . В этой статье описывается, как все это работает, поскольку это не совсем очевидно или просто.

Библиотеки STLSoft абстрагировали все это с помощью так называемых прокладок доступа к строке , которые можно использовать для получения длины строки (и других аспектов) любого типа. Итак, для всего вышеперечисленного (включая нестандартные библиотечные) используется одна и та же функция stlsoft :: c_str_len () . В этой статье описывается, как все это работает, поскольку это не совсем очевидно или просто.

Библиотеки STLSoft абстрагировали все это с помощью так называемых прокладок доступа к строке , которые можно использовать для получения длины строки (и других аспектов) любого типа. Итак, для всего вышеперечисленного (включая нестандартные библиотечные) используется одна и та же функция stlsoft :: c_str_len () . В этой статье описывается, как все это работает, поскольку это не совсем очевидно или просто.

16
ответ дан 24 November 2019 в 03:30
поделиться

Если вы используете старую строку в стиле C вместо новых строк в стиле STL, в библиотеке времени выполнения C есть функция strlen :

const char* p = "Hello";
size_t n = strlen(p);
3
ответ дан 24 November 2019 в 03:30
поделиться

если вы используете std :: string, для этого есть два общих метода:

std::string Str("Some String");
size_t Size = 0;
Size = Str.size();
Size = Str.length();

if you ' при использовании строки в стиле C (с использованием char * или const char *) вы можете использовать:

const char *pStr = "Some String";
size_t Size = strlen(pStr);
3
ответ дан 24 November 2019 в 03:30
поделиться
string foo;
... foo.length() ...

.length и .size являются синонимами, я просто думаю, что «длина» - более ясное слово.

2
ответ дан 24 November 2019 в 03:30
поделиться

для фактического строкового объекта:

yourstring.length();

или

yourstring.size();
2
ответ дан 24 November 2019 в 03:30
поделиться
std::string str("a string");
std::cout << str.size() << std::endl;
2
ответ дан 24 November 2019 в 03:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: