2013-02-17 3 views
4

의 배열을 갖는 string의 길이를 찾아 내려고 노력하고 있지만, 함수가 작동하지 않는다. 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()); 

내가 여기에 누락 되었습니까? 나는

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

string s[]의 길이를 찾을 수 있습니다 알고하지만 strlen() 왜 사용할 수 없습니다. 누군가 일어나는 일을 설명 할 수 있습니까?

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<<" "; 
} 

배열의 길이를 얻을 :

+3

's'는 배열이며'c_str' 함수가 없습니다. std :: vector는 옵션입니까? – billz

+0

'std :: string'이'std :: string []'이 아니라는 사실을 놓치고 있습니다. –

+0

@Billz 그러나 char 형식의 배열에 대해 작동합니다. ???????????/ – DeadCoder

답변

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에 대해서는 null 종료 문자 \0을 찾을 때까지 chars으로 계산됩니다. std::stringc_str() 메서드를 호출하면 널 종료 문자열의 첫 번째 char에 대한 포인터가 생깁니다. (가) strlen 함수의 정의

cout << ss[0].size(); // 1 
+0

이것은 size_t를 반환해야합니다. 훌륭한 답변! –

+0

@juanchopanza 고마워 ..하지만 난 정말 왜 strlen() tempStr 및 문자열 s 작동하는지 알아야합니다. (tempStr 및 s 코드 참조) – DeadCoder

+0

@AlexChamberlain 머리글이'std :: size_t'에 필요하다는 것을 기억하지 못했습니다. 이제 해결되었습니다. – juanchopanza

0

그것은 같이해야합니다

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)을 strlen에서 허용하는 ctype 문자열 (Null 종료 됨)로 변환합니다. 모든 유형의 고정 된 크기의 배열의 길이를 찾기

+0

제공하지 않습니다 정확한 길이. 길이는 1이됩니다. – DeadCoder

+0

무엇을주고 있습니까?. – Arpit

+0

@Arpit 물론 1입니다. 배열의 모든 요소의 길이는 1입니다. – juanchopanza

1

C++ 방법이 size_t의 strlen 함수를 (const를 문자 * str을), 입력 매개 변수의 유형을 기록하십시오. 문자열 s [] = { "a", "b", "c"}를 정의합니다. 배열이므로 다음 문이 작동합니다. strlen (s [0] .c_str()); 또한 길이가 인 배열을 계산하려면 sizeof (s)/sizeof (s [0])가 's'의 모든 요소가 같은 길이 일 때만 작동합니다.

0

: 당신이 각 문자열에 액세스 할 수 있습니다

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 

표준 : : 벡터 사용하는 것입니다 할

관련 문제