我一直在尝试查找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
s之前使用此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()
但为什么我不能使用{{1}}。有人可以解释发生了什么吗?
答案 0 :(得分:8)
使用辅助函数模板很容易找到任何类型的固定大小数组的长度:
#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
。当您调用std::string的c_str()
方法时,您会得到一个指向空终止字符串中第一个char
的指针。
答案 1 :(得分:1)
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
答案 2 :(得分:0)
必须如下:
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
字符串(Null终止),这是strlen接受的。
答案 3 :(得分:0)
strlen的定义:size_t strlen(const char * str),注意输入参数的类型。 你定义字符串s [] = {“a”,“b”,“c”};这是数组,因此以下语句将起作用: strlen的(S [0] .c_str()); 另外,要计算数组的长度,sizeof(s)/ sizeof(s [0])仅在's'的每个元素具有相同长度时起作用。