4

我一直在尝试找到具有函数的 sstring数组的长度,但它不起作用。我正在使用的代码是这样的:charstrlen()

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()在 s 上使用过这个函数时string,它工作得很好:

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

我在这里缺少什么?string s[]我知道我可以找到with的长度

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

但是为什么我不能使用strlen(). 有人可以解释发生了什么吗?

4

4 回答 4

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空终止字符串中第一个的指针。

于 2013-02-17T08:30:42.637 回答
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
于 2013-02-17T08:34:51.527 回答
0

strlen 的定义:size_t strlen ( const char * str ),注意输入参数的类型。你定义字符串 s[]={"a","b","c"}; 这是一个数组,因此以下语句将起作用: strlen(s[0].c_str()); 此外,要计算数组s 的长度,sizeof(s) / sizeof(s[0]) 仅在 's' 的每个元素具有相同长度时才有效。

于 2013-02-17T08:47:39.870 回答
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字符串。并将(STL)c_str()转换为strlen 接受的字符串(空终止)。stringctype

于 2013-02-17T08:26:18.723 回答