2013-02-17 56 views
4

我一直在试图找到string的长度,它的数组有char s,用strlen()函数,但它不起作用。 我使用的代码是这样的:用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" 

但是,当我使用上string年代以前像这样的这种strlen()功能,它工作得很好:

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()。有人可以解释发生了什么吗?

+3

's'是一个数组,它没有'c_str'功能。是std :: vector一个选项? – billz 2013-02-17 08:25:59

+0

您错过了'std :: string'不是'std :: string []'的事实。 – 2013-02-17 08:27:45

+0

@Billz 但它适用于char类型的数组...... .... ???????????/ – DeadCoder 2013-02-17 08:29:29

回答

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的指针。

+0

这应该返回size_t;优秀的答案! – 2013-02-17 08:31:33

+0

@juanchopanza谢谢..但我真的需要知道为什么strlen()适用于tempStr而不是字符串s。 (请参阅tempStr和s的代码) – DeadCoder 2013-02-17 08:33:39

+0

@AlexChamberlain我没有记住我头顶的哪个头是'std :: size_t'所需的。现在修复。 – juanchopanza 2013-02-17 08:33:42

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 string(空终止),它被strlen接受。

+0

没给正确的长度。长度是1. – DeadCoder 2013-02-17 08:28:25

+0

它给。 – Arpit 2013-02-17 08:28:49

+0

@Arpit当然是1,数组中的每个元素的长度为1. – juanchopanza 2013-02-17 08:32:07

1

A 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 
0

的定义strlen的:为size_t strlen的(为const char *海峡),请注意输入参数的类型。 你定义了字符串s [] = {“a”,“b”,“c”};这是一个数组,所以下面的语句将工作: strlen(s [0] .c_str()); 另外,要计算数组的长度,sizeof(s)/ sizeof(s [0])只有在's'的每个元素具有相同长度时才起作用。

相关问题