Maison  >  Article  >  développement back-end  >  Vérifiez si les caractères majuscules dans une chaîne sont utilisés correctement

Vérifiez si les caractères majuscules dans une chaîne sont utilisés correctement

王林
王林avant
2023-08-28 20:57:101344parcourir

Vérifiez si les caractères majuscules dans une chaîne sont utilisés correctement

Énoncé du problème

Nous recevons une chaîne « str », contenant des caractères alphabétiques majuscules ou minuscules. Nous devons vérifier si l'utilisation des caractères majuscules dans la chaîne est correcte.

Voici comment utiliser correctement les lettres majuscules dans les chaînes.

  • Si seul le premier caractère est en majuscule, les autres caractères sont en minuscules.

  • Si tous les caractères de la chaîne sont en minuscules.

  • Si tous les caractères de la chaîne sont en majuscules.

Exemple

Entrez

"Hello"

Sortie

"valid"
La traduction chinoise de

Explication

est :

Explication

Dans "Bonjour", seul le premier caractère est en majuscule et les autres caractères sont en minuscules, c'est donc une chaîne valide.

Entrez

'hello'

Sortie

'valid'
La traduction chinoise de

Explication

est :

Explication

Dans la chaîne "bonjour", tous les caractères sont en minuscules, c'est donc une chaîne valide.

Entrez

‘heLLO’

Sortie

‘Not Valid’
La traduction chinoise de

Explication

est :

Explication

Dans la chaîne 'heLLO', le premier caractère est en minuscule, mais les 3 derniers caractères sont en majuscules, cette chaîne n'est donc pas valide.

Méthode 1

Dans cette méthode, si le premier caractère est minuscule, nous vérifions si tous les caractères de la chaîne sont minuscules et renvoyons une valeur booléenne. Si le premier caractère est une lettre majuscule, nous vérifions si tous les autres caractères sont des lettres majuscules ou minuscules et renvoyons une valeur booléenne.

Algorithme

  • Étape 1 - Définissez la fonction isLower() qui prend un seul caractère comme argument et renvoie une valeur booléenne, que le caractère soit minuscule ou non. Si « caractère-A » est supérieur ou égal à 32, le caractère est en minuscule.

  • Étape 2 - Définissez la fonction isUpper() tout comme la fonction isLower() et renvoyez une valeur booléenne selon que le caractère est en majuscule ou non.

  • Étape 3 - Définissez la fonction isValidUpper() qui vérifie si une chaîne contient tous les caractères majuscules valides.

  • Étape 4 - Dans la fonction isValidUpper(), utilisez la fonction isLower() et vérifiez si le premier caractère est en minuscule. Si oui, utilisez une fonction loop et isUpper() pour vérifier tous les autres caractères. Renvoie false si des caractères sont en majuscules. Sinon, renvoie vrai si tous les caractères sont en minuscules.

  • Étape 5 - Si le premier caractère est une lettre majuscule, vous devez vérifier deux cas. Le premier cas est que tous les caractères peuvent être en majuscules, ou tous les caractères sauf le premier peuvent être en minuscules.

  • Étape 5.1 - Définissez la variable 'totalUpper' et initialisez-la à 1.

  • Étape 5.2 - Comptez le nombre total de caractères majuscules dans la chaîne.

  • Étape 5.3 - Renvoie vrai si le nombre total de caractères majuscules est égal à 1 ou à la longueur de la chaîne, indiquant que la chaîne contient des caractères majuscules valides. Sinon, renvoie faux.

Exemple

#include <bits/stdc++.h>
using namespace std;
// Check if character c is in lowercase or not
bool isLower(char c){
   return c - 'A' >= 32;
}
// Check if character c is in uppercase or not
bool isUpper(char c){
   return c - 'A' < 32;
}
bool isValidUpperCase(string str){
   int len = str.size();
   // If the first character is in lowercase, check whether all the other characters are in lowercase or not.
   // If not, return false. Otherwise, return true.
   if (isLower(str[0]))  {
      for (int i = 1; i < len; i++) {
         if (isUpper(str[i]))
            return false;
      }
      return true;
   } else {
      // If the first character is in uppercase, find the total number of uppercase characters
      int totalUpper = 1;
      for (int i = 1; i < len; i++){
         if (isUpper(str[i]))
            totalUpper++;
      }
      // if the total number of uppercase characters is equal to the length of the string or 1, return true. Otherwise, return false.
      if (totalUpper == len || totalUpper == 1)
         return true;
      else
         return false;
   }
}
int main(){
   string str1 = "TutorialsPoint";
   string str2 = "tutorialspoint";
   string str3 = "Tutorialspoint";
   string str4 = "TUTORIALSPOINT";
   cout << str1 << " : " << (isValidUpperCase(str1) ? "Valid" : "Not valid") << endl;
   cout << str2 << " : " << (isValidUpperCase(str2) ? "Valid" : "Not valid") << endl;
   cout << str3 << " : " << (isValidUpperCase(str3) ? "Valid" : "Not valid") << endl;
   cout << str4 << " : " << (isValidUpperCase(str4) ? "Valid" : "Not valid") << endl;
   return 0;
}

Sortie

TutorialsPoint : Not valid
tutorialspoint : Valid
Tutorialspoint : Valid
TUTORIALSPOINT : Valid
  • Complexité temporelle − O(N) car cela nécessite l'utilisation d'une boucle pour parcourir la chaîne. La complexité temporelle des fonctions isLower() et isUpper() est O(1).

  • Complexité spatiale − O(1) car il n'utilise pas d'espace supplémentaire.

Méthode 2

Dans la méthode ci-dessous, nous avons optimisé le code de la première méthode. Ici, nous vérifions si la chaîne contient des caractères majuscules valides en vérifiant si deux éléments adjacents dans la chaîne, à l'exception des deux premiers caractères, ont la même casse.

Algorithme

  • Étape 1 - Utilisez une boucle for pour parcourir du premier index au dernier index de la chaîne.

  • Étape 2 - Dans la boucle for, si le caractère actuel est une lettre majuscule et que le caractère précédent était une lettre minuscule, renvoyez false car ce n'est pas une chaîne valide.

  • Étape 3 - Si le caractère actuel est une lettre minuscule et que le caractère précédent est une lettre majuscule, suivez les étapes ci-dessous.

  • Étape 3.1 - Vérifiez si le caractère précédent est au 0ème index ou au premier caractère de la chaîne et continuez dans la boucle for.

  • Étape 3.2 - Si le caractère précédent n'est pas le premier caractère, renvoyez false.

Exemple

#include <bits/stdc++.h>
using namespace std;
bool isValidUpperCase(string str){
   for (int i = 1; i < str.length(); i++){
      // If str[i] is in lower case and str[i-1] is in upper case, handle the case
      if (str[i] - 'A' >= 32 && str[i - 1] - 'A' < 32) {     // If the str[i-1] is the first character, continue the loop. Otherwise, return false.
         if (i - 1 == 0)
            continue;
         return false;
      }
      // If str[i] is in upper case and str[i-1] is in lower case, return false.
      else if (str[i] - 'A' < 32 && str[i - 1] - 'A' >= 32) {
         return false;
      }
   }
   // Return true
   return true;
}
int main(){
   string str1 = "TutorialsPoint";
   string str2 = "tutorialspoint";
   string str3 = "Tutorialspoint";
   string str4 = "TUTORIALSPOINT";
   cout << str1 << " : " << (isValidUpperCase(str1) ? "Valid" : "Not valid") << endl;
   cout << str2 << " : " << (isValidUpperCase(str2) ? "Valid" : "Not valid") << endl;
   cout << str3 << " : " << (isValidUpperCase(str3) ? "Valid" : "Not valid") << endl;
   cout << str4 << " : " << (isValidUpperCase(str4) ? "Valid" : "Not valid") << endl;
   return 0;
}

Sortie

TutorialsPoint : Not valid
tutorialspoint : Valid
Tutorialspoint : Valid
TUTORIALSPOINT : Valid
  • Complexité temporelle - O(N) car il nécessite l'utilisation d'une boucle pour parcourir la chaîne.

  • Complexité spatiale − O(1) car il n'utilise pas d'espace supplémentaire.

Conclusion

Dans ce tutoriel, l'utilisateur a appris à vérifier si une chaîne contient des caractères majuscules valides. Nous avons appris deux méthodes différentes. Dans la première approche, nous divisons le problème en trois parties, et dans la seconde approche, nous vérifions la casse des éléments adjacents. Cependant, la complexité temporelle et spatiale des deux codes est similaire, mais le code de la deuxième méthode est plus lisible.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer