4

関数を持つsのstring配列を持つ長さを見つけようとしましたが、機能していません。私が使用しているコードは次のようなものです。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()に以前にこの関数を使用したことがある場合string、それは正常に機能しました:

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()。誰かが何が起こっているのか説明できますか?

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は、nullの終了文字が見つかるまでカウントされます\0std :: stringのメソッドを呼び出すと、nullで終了する文字列c_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

それは次のようでなければなりません:

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)をstrlenによって受け入れられる文字列(ヌル終了)にc_str()変換します。stringctype

于 2013-02-17T08:26:18.723 に答える
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 に答える