Я пытался найти длину 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()
, Может кто-нибудь объяснить, что происходит?
Найти длину массива фиксированного размера любого типа достаточно просто с помощью шаблона вспомогательной функции:
#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
в нулевой завершенной строке.
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
это должно быть как:
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.
определение strlen: size_t strlen (const char * str), обратите внимание на тип входного параметра.
вы определяете строку s [] = {«a», «b», «c»}; который является массив, поэтому будет работать следующее утверждение:
STRLEN (с [0] .c_str ());
Кроме того, для расчета длины массив s, sizeof (s) / sizeof (s [0]) работают только тогда, когда каждый элемент ‘s’ имеет одинаковую длину.