Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Semak sama ada aksara huruf besar dalam rentetan digunakan dengan betul

Semak sama ada aksara huruf besar dalam rentetan digunakan dengan betul

王林
王林ke hadapan
2023-08-28 20:57:101384semak imbas

Semak sama ada aksara huruf besar dalam rentetan digunakan dengan betul

Pernyataan Masalah

Kami diberi rentetan 'str' yang mengandungi aksara abjad huruf besar atau huruf kecil. Kita perlu menyemak sama ada penggunaan aksara besar dalam rentetan adalah betul.

Berikut ialah cara menggunakan huruf besar dengan betul dalam rentetan.

  • Jika hanya aksara pertama huruf besar, aksara lain adalah huruf kecil.

  • Jika semua aksara rentetan adalah huruf kecil.

  • Jika semua aksara rentetan adalah huruf besar.

Contoh

Masuk

"Hello"

Output

"valid"
Terjemahan bahasa Cina bagi

Penjelasan

ialah:

Penjelasan

Dalam "Hello", hanya aksara pertama adalah huruf besar dan aksara lain adalah huruf kecil, jadi ia adalah rentetan yang sah.

Masuk

'hello'

Output

'valid'
Terjemahan bahasa Cina bagi

Penjelasan

ialah:

Penjelasan

Dalam rentetan "hello", semua aksara adalah huruf kecil, jadi ia adalah rentetan yang sah.

Masuk

‘heLLO’

Output

‘Not Valid’
Terjemahan bahasa Cina bagi

Penjelasan

ialah:

Penjelasan

Dalam rentetan 'heLLO', aksara pertama ialah huruf kecil, tetapi 3 aksara terakhir ialah huruf besar, jadi rentetan ini tidak sah.

Kaedah 1

Dalam kaedah ini, jika aksara pertama ialah huruf kecil, kami menyemak sama ada semua aksara rentetan adalah huruf kecil dan mengembalikan nilai boolean. Jika aksara pertama ialah huruf besar, kami menyemak sama ada semua aksara lain ialah huruf besar atau huruf kecil dan mengembalikan nilai boolean.

Algoritma

  • Langkah 1 - Tentukan fungsi isLower() yang mengambil satu aksara sebagai hujah dan mengembalikan nilai Boolean sama ada aksara itu huruf kecil atau tidak. Jika 'watak-A' lebih besar daripada atau sama dengan 32, aksara itu ialah huruf kecil.

  • Langkah 2 - Tentukan fungsi isUpper() sama seperti fungsi isLower() dan kembalikan nilai boolean berdasarkan sama ada aksara itu huruf besar atau tidak.

  • Langkah 3 - Tentukan fungsi isValidUpper() yang menyemak sama ada rentetan mengandungi semua aksara huruf besar yang sah.

  • Langkah 4 - Dalam fungsi isValidUpper(), gunakan fungsi isLower() dan semak sama ada aksara pertama ialah huruf kecil. Jika ya, gunakan fungsi gelung dan isUpper() untuk menyemak semua aksara lain. Mengembalikan palsu jika mana-mana aksara adalah huruf besar. Jika tidak, kembali benar jika semua aksara adalah huruf kecil.

  • Langkah 5 - Jika aksara pertama adalah huruf besar, anda perlu menyemak dua kes. Kes pertama ialah semua aksara boleh menjadi huruf besar, atau semua kecuali aksara pertama boleh menjadi huruf kecil.

  • Langkah 5.1 - Tentukan pembolehubah 'totalUpper' dan mulakannya kepada 1.

  • Langkah 5.2 − Kira jumlah bilangan aksara besar dalam rentetan.

  • Langkah 5.3 - Mengembalikan benar jika jumlah bilangan aksara besar adalah sama dengan 1 atau panjang rentetan, menunjukkan bahawa rentetan itu mengandungi aksara besar yang sah. Jika tidak, pulangan palsu.

Contoh

#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;
}

Output

TutorialsPoint : Not valid
tutorialspoint : Valid
Tutorialspoint : Valid
TUTORIALSPOINT : Valid
  • Kerumitan masa − O(N) kerana ia memerlukan penggunaan gelung untuk melintasi rentetan. Kerumitan masa fungsi isLower() dan isUpper() ialah O(1).

  • Kerumitan ruang − O(1) kerana ia tidak menggunakan sebarang ruang tambahan.

Kaedah 2

Dalam kaedah di bawah, kami telah mengoptimumkan kod kaedah pertama. Di sini kita menyemak sama ada rentetan mengandungi aksara besar yang sah dengan menyemak sama ada dua elemen bersebelahan dalam rentetan kecuali dua aksara pertama mempunyai kes yang sama.

Algoritma

  • Langkah 1 − Gunakan gelung for untuk lelaran daripada indeks pertama rentetan ke indeks terakhir.

  • Langkah 2 - Dalam gelung for, jika aksara semasa ialah huruf besar dan aksara sebelumnya ialah huruf kecil, kembalikan palsu kerana ia bukan rentetan yang sah.

  • Langkah 3 − Jika aksara semasa ialah huruf kecil dan aksara sebelumnya ialah huruf besar, maka ikuti langkah di bawah.

  • Langkah 3.1 - Semak sama ada aksara sebelumnya berada pada indeks ke-0 atau aksara pertama dalam rentetan dan teruskan dalam gelung untuk.

  • Langkah 3.2 − Jika aksara sebelumnya bukan aksara pertama, kembalikan palsu.

Contoh

#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;
}

Output

TutorialsPoint : Not valid
tutorialspoint : Valid
Tutorialspoint : Valid
TUTORIALSPOINT : Valid
  • Kerumitan masa - O(N) kerana ia memerlukan gelung pada rentetan.

  • Kerumitan ruang − O(1) kerana ia tidak menggunakan sebarang ruang tambahan.

Kesimpulan

Dalam tutorial ini, pengguna belajar untuk menyemak sama ada rentetan mengandungi aksara besar yang sah. Kami belajar dua kaedah berbeza. Dalam pendekatan pertama, kami memecahkan masalah kepada tiga bahagian, dan dalam pendekatan kedua, kami menyemak kes watak unsur-unsur bersebelahan. Walau bagaimanapun, kerumitan masa dan ruang kedua-dua kod adalah serupa, tetapi kod kaedah kedua lebih mudah dibaca.

Atas ialah kandungan terperinci Semak sama ada aksara huruf besar dalam rentetan digunakan dengan betul. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam