Найдите длину строкового массива с помощью strlen ()

Я пытался найти длину string который имеет массив charс strlen() функция, но она не работает.
Код, который я использую, выглядит примерно так:

string s[]={"a","b","c"};
int len = strlen(s.c_str());

Выдает следующую ошибку:

"request for member âc_strâ in âwArrayâ, which is of non-class type"

Но когда я использовал это strlen() функция на stringДо этого все работало нормально:

fin.open("input.txt");
string tempStr;
getline(fin, tempStr,'\n');
int len = strlen(tempStr.c_str());

Что мне здесь не хватает? Я знаю, что могу найти длину string s[] с

int size = sizeof( s ) / sizeof( s[ 0 ] );

Но почему я не могу использовать strlen(), Может кто-нибудь объяснить, что происходит?

4

Решение

Найти длину массива фиксированного размера любого типа достаточно просто с помощью шаблона вспомогательной функции:

#include <cstddef> // for std::size_t

template< class T, size_t N >
std::size_t length(const T (&)[N] )
{
return N;
};

string s[]={"a","b","c"};
std::cout << length(s) << std::endl;

В C ++ 11 функция будет constexpr,

Что касается StrLen, это считается chars пока не найдет нулевой символ завершения \0, Когда вы звоните станд :: строка«sc_str() метод, вы получаете указатель на первый char в нулевой завершенной строке.

8

Другие решения

C ++ способ сделать это будет использовать std :: vector

vector<string> ss;

ss.push_back("a");
ss.push_back("b");
ss.push_back("c");

cout << ss.size(); // number of strings in your vector : 3

Вы также можете получить доступ к каждой строке:

cout << ss[0].size(); // 1
1

это должно быть как:

string s[]={"a","b","c"};  //array of string
for(auto i:s){
int len = strlen(i.c_str());  because you need to convert one string to c type string
cout<<len<<" ";
}

чтобы получить длину массива:

std::array<int> nums {1, 3, 5, 7};

std::cout << "nums contains " << nums.size() << " elements.\n";

http://en.cppreference.com/w/cpp/container/array/size

strlen() принимает ctype строки. а также c_str() преобразовать string(STL) в ctype строка (завершена нулем), которая принимается strlen.

0

определение strlen: size_t strlen (const char * str), обратите внимание на тип входного параметра.
вы определяете строку s [] = {«a», «b», «c»}; который является массив, поэтому будет работать следующее утверждение:
STRLEN (с [0] .c_str ());
Кроме того, для расчета длины массив s, sizeof (s) / sizeof (s [0]) работают только тогда, когда каждый элемент ‘s’ имеет одинаковую длину.

0
По вопросам рекламы [email protected]