用strlen()查找字符串数组的长度

时间:2013-02-17 08:23:27

标签: c++ string string.h

我一直在尝试查找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}}。有人可以解释发生了什么吗?

4 个答案:

答案 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::stringc_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'的每个元素具有相同长度时起作用。