C ++检查整个字符串是否为大写

时间:2018-01-03 17:16:47

标签: c++ uppercase

我试图检查整个单词是否为大写,如果这是真的,它应该返回true,否则返回false。

我目前的代码是:

#include "UpperCaseFilter.h"
#include "ReadFilteredWords.h"
#include "ReadWords.h"
#include <locale>

bool UpperCaseFilter::filter(string word) {
    if(!word.empty()) {
        for(int i = 0; i < word.length(); i++) {
            if(isupper(word[i])) {
                return true;

            }
            else {
                return false;
            }
        }
    }
}

这段代码的问题是,如果我有例如HeLLO,它将返回true,因为我的最后一个字符是真的。如果整个字符串为true,我将如何仅返回true。我是用计数器方法做的,但效率不高。

我也尝试使用all_of方法,但我认为我没有正确的编译器版本,因为它说all_of isn't defined(即使输入正确)。

我不确定其他方法是什么。

6 个答案:

答案 0 :(得分:5)

bool is_all_upper(const std::string& word)
{
    for(auto& c: word) 
        if(!std::isupper(static_cast<unsigned char>(c))) 
            return false;
    return true;
}

我假设,如果字符串为空,则可以将其视为全大写。

答案 1 :(得分:4)

或者在谓词中使用std::all_of函数和std::isupper

#include <iostream>
#include <string>
#include <algorithm>

int main() {
    std::string s = "HELLo";
    if (std::all_of(s.begin(), s.end(), [](unsigned char c){ return std::isupper(c); })) {
        std::cout << "Is uppercase." << '\n';
    } else {
        std::cout << "Is not uppercase." << '\n';
    }
}

用作功能的一部分:

bool isUpper(const std::string& s) {
    return std::all_of(s.begin(), s.end(), [](unsigned char c){ return std::isupper(c); });
}

答案 2 :(得分:1)

你的循环中不应该有两个返回条件。相反,你可以使用循环来发现问题,如果没有问题,你将逃脱循环并告诉用户最后一切都没问题。

在你说的评论中,我认为如果字符串为空则不需要返回任何内容&#34 ;;但是,具有返回类型的函数(例如此总是)会返回一些内容。如果你没有指定一个返回值,它会给你一个,无论你喜不喜欢。因此,您必须确定每个可能的输入应该是什么输出。因此,我添加了一个强调空字符串特殊条件的if语句。

#include "UpperCaseFilter.h"
#include "ReadFilteredWords.h"
#include "ReadWords.h"
#include <locale>

bool UpperCaseFilter::filter(const string &word) {
  if(word.empty()) //You'll need to do the right thing here
    return true;

  //Even if the right thing to do were to return true, so that
  //the check above would be redundant, you'd want to leave a
  //comment here pointing out that you've handled the special case

  for(size_t i = 0; i < word.length(); i++)
    if(!isupper(static_cast<unsigned char>(word[i])))
      return false;

  return true;
}

请注意,之前的功能签名是:

bool UpperCaseFilter::filter(string word) {

我已将此更改为:

bool UpperCaseFilter::filter(const string &word) {

const保证函数不会改变word&符号将字符串传递给函数而不复制它。这使得功能更快并节省了内存。

答案 3 :(得分:0)

#include "UpperCaseFilter.h"
#include "ReadFilteredWords.h"
#include "ReadWords.h"
#include <locale>

bool UpperCaseFilter::filter(string word) 

 {
    int k=0;
    if(!word.empty()) 
     {
        for(int i = 0; i < word.length(); i++) 
          {
            if(isupper(word[i]))
                k++;

           }
       }

   if(k==word.length())
      return true;

   else
      return false; //this will return false even when word length is 0

}


its more simple now provided if you have done other things right this would run.

答案 4 :(得分:0)

<!DOCTYPE html>
<html lang="fr">

<head>
    <meta charset="utf-8" http-equiv="Content-Type" content="text/html"/>
    <title>Ma page</title>
    <meta name="author" content="Erwan Dupeux-Maire" />
    <meta name="keywords" content="html, xhtml, conception, creation de site web, realisation de site web, formation, cours" />
    <meta name="description" content="Support du cours de conception et réalisation de sites Web en XHTML" />
    <link href="style.css" rel="stylesheet">

</head>
<body>
<header class="header">
    <nav class="nav">
    <ul class="ul">
        <li ><a class="accueil" href="index.html">Accueil</a></li>
        <li><a href="Menu.html">Menu</a></li>
        <li><a href="contact.html">Contact</a></li>
        <li><a href="https://grafikart.html">Grafikart</a></li>
    </ul>
    <h1 class="title">Restaurant le Fiasco</h1>
    <img class="baniere" src="https://via.placeholder.com/1200x600" alt="banière restaurant le fiasco"/>
    <div class="fondu"></div>
    <div class="fondu2"></div>
    </nav>

    <div class="MonTitre">
        <h2>Mon Titre</h2>
        <p>Buzz Aldrin, né Edwin Eugene Aldrin Jr. le 20 janvier 1930 à Glen Ridge dans le New Jersey, est un militaire, pilote d'essai, astronaute et ingénieur américain. Il effectue trois sorties dans l'espace en tant que pilote de la mission Gemini 12 de 1966 et, en tant que pilote du module lunaire Apollo de la mission Apollo 11 de 1969, il est, avec le commandant de la mission Neil Armstrong, parmi les deux premiers humains à marcher sur la Lune.</p>
    </div>
</header>

    <div class="section1">
        <h2 class="title_2">
            A propos du restaurant
        </h2>
        <img class="200_1" src="https://via.placeholder.com/200x200" alt="200x200"/>
        <img class="200_2" src="https://via.placeholder.com/200x200" alt="200x200"/>
        <p class="paragraphe_arround">
            Terminologie
            Selon le dictionnaire de langue française le Larousse1 ainsi que l'Office québécois de la langue française2 (mais inconnu du Centre national de ressources textuelles et lexicales3), le terme « développeur » s'applique en informatique à une personne ou une société qui développe et conçoit des logiciels. Cependant, s'agissant d'une ...
        </p>
    </div>

    <section class="aside">
        <img class="aside-img-200x400" src="https://via.placeholder.com/200x400" alt="200x200"/>
    </section>
</body>
</html>

答案 5 :(得分:-1)

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
    string str;
    cin >> str;
    bool flag = false;
    int i = 0;
    while(str[i])
    {
        if(isupper(str[i]))
        { 
            flag = true;
        }
        if(!(isupper(str[i])))
        {
            flag = false;
            break;
        }
        i++;
    }
    if(flag == false)
        cout << "false"  << endl;
    else
        cout << "true" << endl;
}