2015-12-06 4 views
0

Начальный студент C++ здесь, первый класс программирования. Я пытаюсь собрать программу, которая будет определять, есть ли строка в нижнем регистре или нет. Я добрался до кода ниже. Однако мне нужно учитывать пробелы "". Если в строке, которая вводится пользователем, есть пробел, предполагается, что программа вернет, что это не все строчные буквы. Пример:Программа для определения строчек нижнего регистра

ввод: abc def возвращение: строка не имеет нижнего регистра.

Вы бы любезно посоветовали, что было бы лучшим способом учесть это в коде ниже?

ПРИМЕЧАНИЕ: Я знаю, что у меня есть «дополнительные» заголовочные файлы, но это потому, что это будет частью другой программы, и это всего лишь отрывок, чтобы заставить все работать.

Спасибо вам большое!

#include <fstream> 
#include <iostream> 
#include <string> 
#include <cstdlib> 
#include <algorithm> 
#include <cctype> 
#include <iomanip> 

using namespace std; 

bool die(const string & msg); 


bool allLower(const string & l); 

int main() { 

    string l; 

    cout << "\nEnter a string (all lower case?): "; 
    cin >> l; 

    if (allLower(l) == true) 
    { 
     cout << "The string is lower case." << endl; 
    } 
    else 
    { 
     cout << "The string is not lower case." << endl; 
    } 



} 



bool allLower(const string & l) { 

    struct IsUpper { 
     bool operator()(int value) { 
      return ::isupper((unsigned char)value); 
     } 
    }; 

    return std::find_if(l.begin(), l.end(), IsUpper()) == l.end(); 

} 

bool die(const string & msg){ 
    cout << "Fatal error: " << msg << endl; 
    exit(EXIT_FAILURE); 
} 
+0

Так же, как ':: isupper' есть функции, такие как' :: isspace', чтобы проверить для пространств –

ответ

0

Вы можете использовать старую добрую форму для петли.

bool allLower(const std::string & l) 
{ 
    for(unsigned int i = 0; i < l.size(); i++) 
    { 
     if(l[i] == ' ') 
     { 
      return false; 
     } 
     else if(isalpha(l[i])) 
     { 
      if(isupper(l[i])) 
       return false; 
     } 
    } 
    return true; 
} 

Обратите внимание, что если вы подадите что-то вроде «2», оно вернет true. Вы можете добавить окончательное утверждение else, которое возвращает false, если вы этого желаете.

0

Вы можете проверить, является ли символ буквенным, используя функцию std :: isalpha() перед использованием std :: isupper() или std :: islower(), чтобы проверить, все ли буквы в вашей строке имеют прописные/в нижнем регистре, и т.д.

0

диапазон на основе цикла будет понятнее, чем индексы IMO

bool allLower(const std::string &l) 
{ 
    for (auto c : l) 
    { 
     if ((c == ' ') || 
      (std::isalpha(c) && std::isupper(c))) 
     { 
      return false; 
     } 
    } 
    return true; 
} 
Смежные вопросы