लाइन लाइन खाली है या नहीं, यह जांचने का एक आसान तरीका है। तो मैं यह जांचना चाहता हूं कि इसमें कोई सफेद स्थान है जैसे कि \ r \ n \ t और रिक्त स्थान।लाइनलाइन व्हाइटस्पेस
धन्यवाद
लाइन लाइन खाली है या नहीं, यह जांचने का एक आसान तरीका है। तो मैं यह जांचना चाहता हूं कि इसमें कोई सफेद स्थान है जैसे कि \ r \ n \ t और रिक्त स्थान।लाइनलाइन व्हाइटस्पेस
धन्यवाद
आपको यह देखना होगा एक पाश में isspace
समारोह का उपयोग कर सकते है, तो सभी वर्ण श्वेत रिक्ति हैं:
int is_empty(const char *s) {
while (*s != '\0') {
if (!isspace((unsigned char)*s))
return 0;
s++;
}
return 1;
}
यह फ़ंक्शन 0 वापस लौटाएगा यदि कोई वर्ण व्हाइटस्पेस नहीं है (यानी रेखा खाली नहीं है), या 1 अन्यथा।
एक 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; }
}
यदि एक स्ट्रिंग 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;
}
निम्नलिखित उदाहरण पर विचार:
#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;
}
मैं के लिए '\ 0' के बाद से '\ 0' की जांच नहीं करेगा तुम भी एक साधारण समारोह है कि स्ट्रिंग में केवल एक बार पार होगा लिख सकते हैं अंतरिक्ष नहीं है और लूप वहां खत्म हो जाएगा।
int is_empty(const char *s) {
while (isspace((unsigned char)*s))
s++;
return *s == '\0' ? 1 : 0;
}
मेरे सुझाव होगा:
int is_empty(const char *s)
{
while (isspace(*s) && s++);
return !*s;
}
एक
working example साथ
।
जटिलता के मामले में, यह ओ (एन) के साथ रैखिक है, जहां इनपुट स्ट्रिंग का आकार n है।
के लिए सी ++ 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 == ' '; });
लेकिन isspace() वापसी मान ग स्थान स्थापित पर निर्भर करता है और इसलिए 'isspace' के तर्क के आधार पर है कि यह नई पंक्ति या टैब वर्ण के लिए झूठी लौट सकते हैं – Suba