2009-05-25 37 views
91

मुझे C++ में स्ट्रिंग में वर्णों की संख्या कैसे प्राप्त करनी चाहिए?std :: string में वर्णों की संख्या कैसे प्राप्त करें?

+0

किस तरह बिना स्ट्रिंग तार क्या आप से निपट रहे हैं? std :: स्ट्रिंग? सी स्ट्रिंग? शून्य समाप्त स्ट्रिंग? –

+0

सबसे मूर्ख-प्रमाण तरीका इसके माध्यम से लूप के लिए होगा और पात्रों को स्वयं गिनें। – Krythic

उत्तर

154

आप एक std::string उपयोग कर रहे हैं, कहते हैं length():

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

आप एक सी-स्ट्रिंग का उपयोग कर रहे हैं, तो फोन strlen()

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

या, यदि आप (योएल Spolsky likes to call them के रूप में या f ***** तार, जब वे एक अनुगामी शून्य है) पास्कल शैली तार का उपयोग कर, सिर्फ पहली चरित्र भिन्नता पसंद करने के लिए होता है।

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

कौन सा सही दिमाग में पास्कल-स्टाइल स्ट्रिंग का उपयोग करेगा? – Xarn

+5

लंबाई नहीं है() बाइट्स की संख्या वापस, वर्णों की संख्या नहीं? –

+2

एक std :: स्ट्रिंग के लिए, यह वही बात है (जब तक आप एक चर लंबाई लंबाई एन्कोडिंग संग्रहीत नहीं कर रहे हैं, या बहु-बाइट वर्णों को संग्रहीत करने के लिए std :: स्ट्रिंग का उपयोग कर रहे हैं)। यदि आप ऐसा कर रहे हैं, तो आपको std लाइब्रेरी से कुछ भी मदद नहीं मिल रही है, इसलिए आप अपने स्वयं के स्ट्रेल को भी रोलिंग कर सकते हैं। Wstring के लिए, u16string और u32string, यह बाइट्स की बजाय वर्णों की संख्या देता है। (फिर से यह साबित करने के साथ कि यदि आप उनमें से किसी एक में चर-लंबाई एन्कोडिंग का उपयोग कर रहे हैं, तो आपको अपना खुद का स्ट्रेल रोल करना होगा)। – Eclipse

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

। लम्बाई और .size समानार्थी हैं, मुझे लगता है कि "लंबाई" थोड़ा स्पष्ट शब्द है।

+1

आकार() कंटेनरों में सार्वभौमिक है, यद्यपि। – rlbond

+0

आकार() निराश है क्योंकि मुझे याद है कि कुछ कार्यान्वयन में यह "लंबाई() + 1" (क्योंकि इसमें शून्य टर्मिनेटर शामिल है) वापस आ जाएगा। तो बस लंबाई() का उपयोग करें क्योंकि यह क्लीनर और अधिक पोर्टेबल है। – nlaq

+1

@LaQuet, यदि आप मानकों-अनुपालन कंपाइलर या एसटीएल कार्यान्वयन का उपयोग नहीं कर रहे हैं तो आपके पास चिंता करने के लिए और अधिक चीज़ें हैं। – strager

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

जब सी ++ तार (std :: स्ट्रिंग) के साथ काम कर, आप length() या size() के लिए देख रहे हैं। दोनों आपको एक ही मूल्य प्रदान करना चाहिए। हालांकि सी-स्टाइल स्ट्रिंग से निपटने पर, आप 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 के बजाय # शामिल का उपयोग करके संकलक चेतावनी (कुछ सी ++ compilers में) से बच सकते हैं उल्लेख करने के लिए केवल व्यक्ति ही शामिल है। – MikeKulls

2

एक वास्तविक स्ट्रिंग वस्तु के लिए:

yourstring.length(); 

या

yourstring.size(); 
3

आप पुराने उपयोग कर रहे हैं, सी शैली स्ट्रिंग एन के बजाय

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

यह क्या स्ट्रिंग प्रकार आप के बारे में बात कर रहे हैं पर निर्भर करता है: सुराही, एसटीएल शैली तार, वहाँ सी चलाने समय पुस्तकालय में strlen सुविधा नहीं होती। वहाँ तार के कई प्रकार हैं: - एक सी शैली multibyte स्ट्रिंग

  • const wchar_t* - एक सी शैली विस्तृत स्ट्रिंग
  • std::string - एक "मानक" multibyte स्ट्रिंग
  • std::wstring -

    1. const char* एक " मानक "चौड़ा स्ट्रिंग

    3 और 4 के लिए, आप .size() या .length() विधियों का उपयोग कर सकते हैं।

    1 के लिए, आप strlen() उपयोग कर सकते हैं, लेकिन आप यह सुनिश्चित करना चाहिए कि स्ट्रिंग चर शून्य नहीं है (=== 0)

    2 के लिए, आप wcslen() उपयोग कर सकते हैं, लेकिन आप यह सुनिश्चित करना चाहिए कि स्ट्रिंग चर रहा है शून्य नहीं (=== 0)

    ऐसे MFC के CString के रूप में गैर मानक सी ++ पुस्तकालयों में अन्य प्रकार स्ट्रिंग, कर रहे हैं, ATL के CComBSTR, ऐस के ACE_CString, और इतने पर, इस तरह के .GetLength() के रूप में तरीकों के साथ, और इतने पर। मैं उन सभी के विनिर्देशों को याद नहीं कर सकता जो मेरे सिर के ऊपर से ठीक हैं।

    STLSoft पुस्तकालयों ने इसे string access shims पर कॉल करने के साथ समझाया है, जिसका उपयोग स्ट्रिंग लम्बाई (और अन्य पहलुओं) को किसी भी प्रकार से प्राप्त करने के लिए किया जा सकता है। तो उपर्युक्त सभी (गैर-मानक लाइब्रेरी वाले सहित) के लिए एक ही फ़ंक्शन stlsoft::c_str_len() का उपयोग कर। This article वर्णन करता है कि यह सब कैसे काम करता है, क्योंकि यह पूरी तरह से स्पष्ट या आसान नहीं है।

  • 3

    आप std :: स्ट्रिंग का उपयोग कर रहे हैं, उसके लिए दो सामान्य तरीके हैं:

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

    आप सी शैली स्ट्रिंग उपयोग कर रहे हैं (चार * या स्थिरांक चार * का प्रयोग करके) तो आप कर सकते हैं उपयोग करें:

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

    यह एक स्ट्रिंग इनपुट करने और इसकी लंबाई खोजने का सबसे आसान तरीका हो सकता है।

    // 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

    क्या आपको लगता है कि गिनती (स्ट्रिंग) उस स्ट्रिंग :: लंबाई() नहीं करता है? स्ट्रिंग में 2 अरब से अधिक वर्ण होने पर स्ट्रिंग की एक अतिरिक्त प्रतिलिपि बनाने और नकारात्मक मूल्य लौटने के अलावा। – Eclipse

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

    रिक्त स्थान

    #include <iostream> 
    #include <string> 
    using namespace std; 
    int main(){ 
        string str; 
        cin>>str; 
        cout<<"Length of given string is"<<str.length(); 
        return 0; 
    } 
    
    संबंधित मुद्दे