2010-10-20 16 views
6

लाइन लाइन खाली है या नहीं, यह जांचने का एक आसान तरीका है। तो मैं यह जांचना चाहता हूं कि इसमें कोई सफेद स्थान है जैसे कि \ r \ n \ t और रिक्त स्थान।लाइनलाइन व्हाइटस्पेस

धन्यवाद

+0

लेकिन isspace() वापसी मान ग स्थान स्थापित पर निर्भर करता है और इसलिए 'isspace' के तर्क के आधार पर है कि यह नई पंक्ति या टैब वर्ण के लिए झूठी लौट सकते हैं – Suba

उत्तर

15

आपको यह देखना होगा एक पाश में isspace समारोह का उपयोग कर सकते है, तो सभी वर्ण श्वेत रिक्ति हैं:

int is_empty(const char *s) { 
    while (*s != '\0') { 
    if (!isspace((unsigned char)*s)) 
     return 0; 
    s++; 
    } 
    return 1; 
} 

यह फ़ंक्शन 0 वापस लौटाएगा यदि कोई वर्ण व्हाइटस्पेस नहीं है (यानी रेखा खाली नहीं है), या 1 अन्यथा।

+2

। 'हस्ताक्षरित चार' पर डाला जाना चाहिए (है * फ़ंक्शंस "पसंद नहीं करते" नकारात्मक इनपुट और 'char' पर हस्ताक्षर किए जा सकते हैं): 'जारीस्थान ((हस्ताक्षरित चार) * एस)' – pmg

+0

जो काम करेगा। धन्यवाद! – Matt

0

एक char *x=" "; यहाँ देखते हुए है कि मैं क्या कर सकते हैं सुझाव:

bool onlyspaces = true; 
for(char *y = x; *y != '\0'; ++y) 
{ 
    if(*y != '\n') if(*y != '\t') if(*y != '\r') if(*y != ' ') { onlyspaces = false; break; } 
} 
1

यदि एक स्ट्रिंग s में केवल सफेद स्पेस वर्ण होते हैं तो strspn(s, " \r\n\t") स्ट्रिंग की लंबाई वापस कर देगा। इसलिए जांचने का एक आसान तरीका strspn(s, " \r\n\t") == strlen(s) है लेकिन यह स्ट्रिंग को दो बार पार करेगा।

bool isempty(const char *s) 
{ 
    while (*s) { 
    if (!isspace(*s)) 
     return false; 
    s++; 
    } 
    return true; 
} 
0

निम्नलिखित उदाहरण पर विचार:

#include <iostream> 
#include <ctype.h> 

bool is_blank(const char* c) 
{ 
    while (*c) 
    { 
     if (!isspace(*c)) 
      return false; 
     c++; 
    } 
    return false; 
} 

int main() 
{ 
    char name[256]; 

    std::cout << "Enter your name: "; 
    std::cin.getline (name,256); 
    if (is_blank(name)) 
     std::cout << "No name was given." << std:.endl; 


    return 0; 
} 
+1

'str',' * c', 'c' यह कौन सा है?:-) – pmg

+0

@pmg: केवल 'str' गलत है। '* सी'' सी' का मान है, तो यह ठीक है! लेकिन आपका शुक्रिया! – Rizo

1

मैं के लिए '\ 0' के बाद से '\ 0' की जांच नहीं करेगा तुम भी एक साधारण समारोह है कि स्ट्रिंग में केवल एक बार पार होगा लिख ​​सकते हैं अंतरिक्ष नहीं है और लूप वहां खत्म हो जाएगा।

int is_empty(const char *s) { 
    while (isspace((unsigned char)*s)) 
      s++; 
    return *s == '\0' ? 1 : 0; 
} 
0

मेरे सुझाव होगा:

int is_empty(const char *s) 
{ 
    while (isspace(*s) && s++); 
    return !*s; 
} 
एक working example साथ

    स्ट्रिंग के वर्णों से अधिक
  1. लूप्स और बंद हो जाता है जब
    • या तो एक गैर अंतरिक्ष चरित्र पाया गया था,
    • या नुल चरित्र दौरा किया था।
  2. जहां स्ट्रिंग पॉइंटर बंद हो गया है, जांचें कि स्ट्रिंग का समावेश नल चरित्र है या नहीं।

जटिलता के मामले में, यह ओ (एन) के साथ रैखिक है, जहां इनपुट स्ट्रिंग का आकार n है।

0

के लिए सी ++ 11 आप जाँच कर सकते हैं एक स्ट्रिंग std::all_of और isspace (रिक्त स्थानों, टैब, न्यू लाइन, ऊर्ध्वाधर टैब, फ़ीड और गाड़ी वापसी के लिए isspace चेकों का उपयोग कर खाली स्थान के है:

std::string str = "  "; 
std::all_of(str.begin(), str.end(), isspace); //this returns true in this case 

यदि आप वास्तव में केवल तो चरित्र अंतरिक्ष के लिए जाँच करना चाहते हैं:।

std::all_of(str.begin(), str.end(), [](const char& c) { return c == ' '; });