2009-05-25 7 views
91

C++で文字列の文字数を取得するにはどうすればよいですか?std :: stringの文字数を取得する方法は?

+0

どんななし

#include <iostream> #include <string> using namespace std; int main(){ string str; getline(cin,str); cout<<"Length of given string is"<<str.length(); return 0; } 

文字列を

文字列を以下の通りです。あなたは文字列を扱っていますか? std :: string? cstring?ヌル終了文字列? –

+0

最も愚かでない方法は、それをループして文字を自分で数えることです。 – Krythic

答えて

154

あなたがstd::stringを使用している場合は、length()を呼び出す:

std::string str = "hello"; 
std::cout << str << ":" << str.length(); 
// Outputs "hello:5" 

あなたは、C-文字列を使用している場合は、strlen()を呼び出します。

const char *str = "hello"; 
std::cout << str << ":" << strlen(str); 
// Outputs "hello:5" 

それとも、あなたはパスカルスタイルの文字列を使って好きなことが起こる場合(またはFを*****ジョエル・スポルスキlikes to call themのように文字列彼らは末尾のNULLを持つ)、ちょうど最初の文字を逆参照。 C++の文字列(のstd ::文字列)を扱う場合

const char *str = "\005hello"; 
std::cout << str + 1 << ":" << *str; 
// Outputs "hello:5" 
+3

パスカルスタイルの文字列を使用するのは正しいですか? – Xarn

+5

length()は文字数ではなくバイト数を返しますか? –

+2

std :: stringの場合は、同じことです(可変長エンコーディングを格納する場合や、std :: stringを使用してマルチバイト文字を格納する場合を除きます)。もしあなたがそうしているのであれば、stdライブラリのものは何も助けにならないでしょう。 wstring、u16stringおよびu32stringの場合、バイトではなく文字数を返します。 (ただし、それらのいずれかで可変長エンコーディングを使用している場合は、独自のstrlenをロールバックする必要があります)。 – Eclipse

2
string foo; 
... foo.length() ... 

.lengthと.sizeは同義語ですが、私はちょうど "長さ"は少し明確な単語だと思っています。

+1

size()はコンテナ全体で共通ですが、 – rlbond

+0

size()は、いくつかの実装ではnullのターミネータを含むため、 "length()+ 1"を返すことを覚えているので、お勧めしません。だから、それはクリーナーで、より移植性のある長さ()を使用してください。 – nlaq

+1

@LaQuet、標準準拠のコンパイラまたはSTL実装を使用していない場合は、さらに気になることがあります。 – strager

2
std::string str("a string"); 
std::cout << str.size() << std::endl; 
20

、あなたはlength()size()を探しています。どちらも同じ価値を提供するはずです。しかし、Cスタイルの文字列を扱う場合は、strlen()を使用します。

#include <iostream> 
#include <string.h> 

int main(int argc, char **argv) 
{ 
    std::string str = "Hello!"; 
    const char *otherstr = "Hello!"; // C-Style string 
    std::cout << str.size() << std::endl; 
    std::cout << str.length() << std::endl; 
    std::cout << strlen(otherstr) << std::endl; // C way for string length 
    std::cout << strlen(str.c_str()) << std::endl; // convert C++ string to C-string then call strlen 
    return 0; 
} 

出力:実際の文字列オブジェクトの

6 
6 
6 
6 
+3

注意含まれていることだけを言及する人。 – Colin

+1

1の の#include を使用して(特定のC++コンパイラで)コンパイラの警告を回避することができ – MikeKulls

2

yourstring.length(); 

または

yourstring.size(); 
3

古い、Cスタイルの文字列を使用している場合nの代わりに

const char* p = "Hello"; 
size_t n = strlen(p); 
15

それはあなたが何を言ってるのか、文字列のタイプによって異なります水差し、STL形式の文字列は、Cランタイムライブラリでstrlen機能があります。文字列の多くの種類があります。

  1. const char* - Cスタイルのマルチバイト文字列
  2. const wchar_t* - Cスタイルのワイド文字列
  3. std::string - "標準" マルチバイト文字列
  4. std::wstring - 」標準のワイド文字列

3と4は、.size()または.length()のメソッドを使用できます。

1について、あなたはstrlen()を使用することができますが、(=== 0)2については

、あなたがwcslen()を使用することができます文字列変数がNULLでないことを確認する必要がありますが、文字列変数があることを確認する必要がありますNULLではない(=== 0)

なMFCのCStringなどの非標準C++ライブラリ内の他の文字列型は、ありますが、ATLのCComBSTR、ACEのACE_CString、というように、そのよう.GetLength()ような方法で、というように。私は頭の上からすべてのものを覚えていない。

STLSoftライブラリでは、これをすべてstring access shimsと呼んでいます。これは、任意のタイプから文字列の長さ(およびその他の側面)を取得するために使用できます。したがって、上記のすべて(非標準ライブラリを含む)では、同じ関数stlsoft::c_str_len()を使用します。 This articleは、すべてが完全に明白であるか簡単ではないので、すべての仕組みを記述します。

3

あなたがのstd ::文字列を使用している場合は、そのための2つの一般的な方法があります

std::string Str("Some String"); 
size_t Size = 0; 
Size = Str.size(); 
Size = Str.length(); 

あなたは(char型の*またはconstのchar *を使用)Cスタイルの文字列を使用している場合は、その後のことができます。

const char *pStr = "Some String"; 
size_t Size = strlen(pStr); 
0

文字列を入力してその長さを見つけるのが最も簡単な方法です。 std名前空間を気にせずに文字列の長さを得るために

// Finding length of a string in C++ 
#include<iostream> 
#include<string> 
using namespace std; 

int count(string); 

int main() 
{ 
string str; 
cout << "Enter a string: "; 
getline(cin,str); 
cout << "\nString: " << str << endl; 
cout << count(str) << endl; 

return 0; 

} 

int count(string s){ 
if(s == "") 
    return 0; 
if(s.length() == 1) 
    return 1; 
else 
    return (s.length()); 

} 
+3

count(文字列)がstring :: length()はしないと思いますか?文字列の余分なコピーを不必要に作成し、文字列に20億を超える文字がある場合は負の値を返します。 – Eclipse

0

最も簡単な方法は、スペースを入れずに/スペース

#include <iostream> 
#include <string> 
using namespace std; 
int main(){ 
    string str; 
    cin>>str; 
    cout<<"Length of given string is"<<str.length(); 
    return 0; 
} 
関連する問題