首頁 > 後端開發 > C++ > 檢查字串中的大寫字元是否被正確使用

檢查字串中的大寫字元是否被正確使用

王林
發布: 2023-08-28 20:57:10
轉載
1410 人瀏覽過

檢查字串中的大寫字元是否被正確使用

問題陳述

我們給了一個字串‘str’,包含大寫或小寫的字母字元。我們需要檢查字串中大寫字元的使用是否正確。

以下是在字串中正確使用大寫字母的方法。

  • 如果只有第一個字元是大寫的,其他字元都是小寫的。

  • 如果字串的所有字元都是小寫。

  • 如果字串的所有字元都是大寫。

範例

輸入

"Hello"
登入後複製

輸出

"valid"
登入後複製

Explanation

的中文翻譯為:

解釋

「Hello」中,只有第一個字元為大寫,其他字元皆為小寫,因此是一個有效的字串。

輸入

'hello'
登入後複製

輸出

'valid'
登入後複製

Explanation

的中文翻譯為:

解釋

在「hello」字串中,所有字元都是小寫的,因此它是一個有效的字串。

輸入

‘heLLO’
登入後複製

輸出

‘Not Valid’
登入後複製

Explanation

的中文翻譯為:

解釋

在字串‘heLLO’中,第一個字元是小寫的,但是最後3個字元是大寫的,所以這個字串是無效的。

方法一

在這種方法中,如果第一個字元是小寫字母,我們檢查字串的所有字元是否都是小寫字母,並傳回一個布林值。如果第一個字元是大寫字母,我們檢查所有其他字元是大寫字母或小寫字母,並傳回布林值。

演算法

  • 步驟 1 - 定義 isLower() 函數,該函數將單一字元作為參數,並傳回布林值該字元是否為小寫。如果‘character-A’大於或等於32,則表示字元為小寫。

  • 步驟 2 - 定義 isUpper() 函數,就像 isLower() 函數一樣,並根據字元是否為大寫字母傳回一個布林值。

  • 第 3 步 - 定義 isValidUpper() 函數,該函數檢查字串是否包含所有有效的大寫字元。

  • 步驟 4 - 在 isValidUpper() 函數中,使用 isLower() 函數,並檢查第一個字元是否為小寫。如果是,請使用循環和 isUpper() 函數檢查所有其他字元。如果有任何字元為大寫,則傳回 false。否則,如果所有字元均為小寫,則傳回 true。

  • 第5步 - 如果第一個字元是大寫字母,則需要檢查兩種情況。第一種情況是所有字元都可以是大寫字母,或者除了第一個字元外,所有字元都可以是小寫字母。

  • 第5.1步 - 定義變數‘totalUpper’並將其初始化為1。

  • 步驟 5.2 − 計算字串中大寫字元的總數。

  • 步驟 5.3 - 如果大寫字元總數等於 1 或字串長度,則表示字串包含有效的大寫字符,傳回 true。否則,返回 false。

範例

#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;
}
登入後複製

輸出

TutorialsPoint : Not valid
tutorialspoint : Valid
Tutorialspoint : Valid
TUTORIALSPOINT : Valid
登入後複製
登入後複製
  • 時間複雜度 − O(N),因為它需要使用迴圈遍歷字串。 isLower()和isUpper()函數的時間複雜度為O(1)。

  • 空間複雜度 − O(1),因為它沒有使用任何額外的空間。

方法2

在下面的方法中,我們優化了第一種方法的程式碼。在這裡,我們檢查字串中除前兩個字元之外的兩個相鄰元素是否大小寫相同,以檢查字串是否包含有效的大寫字元。

演算法

  • 步驟 1 − 使用 for 迴圈從字串的第一個索引迭代到最後一個索引。

  • 第二步 - 在for迴圈中,如果目前字元是大寫字母且前一個字元是小寫字母,則傳回false,因為它不是一個有效的字串。

  • 步驟 3 − 如果目前字元是小寫字母且前一個字元是大寫字母,請依照下列步驟進行。

  • 第3.1步 - 檢查前一個字符是否在字串中的第0個索引或第一個字符,並在for循環中繼續。

  • 步驟 3.2 − 如果前一個字元不是第一個字符,則傳回 false。

範例

#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;
}
登入後複製

輸出

TutorialsPoint : Not valid
tutorialspoint : Valid
Tutorialspoint : Valid
TUTORIALSPOINT : Valid
登入後複製
登入後複製
  • 時間複雜度 - O(N),因為它需要使用迴圈遍歷字串。

  • 空間複雜度 − O(1),因為它沒有使用任何額外的空間。

結論

在本教程中,使用者學會了檢查字串中是否包含有效的大寫字元。我們學習了兩種不同的方法。在第一種方法中,我們將問題分解為三個部分,在第二種方法中,我們檢查相鄰元素的字元大小寫。然而,這兩種程式碼的時間和空間複雜度相似,但第二種方法的程式碼更易讀。

以上是檢查字串中的大寫字元是否被正確使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:tutorialspoint.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板