0

0

检查字符串中的大写字符是否被正确使用

王林

王林

发布时间:2023-08-28 20:57:10

|

1649人浏览过

|

来源于tutorialspoint

转载

检查字符串中的大写字符是否被正确使用

问题陈述

我们给出了一个字符串‘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步 - 如果第一个字符是大写字母,则需要检查两种情况。第一种情况是所有字符都可以是大写字母,或者除了第一个字符外,所有字符都可以是小写字母。

    Transor
    Transor

    专业的AI翻译工具,支持网页、字幕、PDF、图片实时翻译

    下载
  • 第5.1步 - 定义变量‘totalUpper’并将其初始化为1。

  • 步骤 5.2 − 计算字符串中大写字符的总数。

  • 步骤 5.3 - 如果大写字符总数等于 1 或字符串长度,则表示字符串包含有效的大写字符,返回 true。否则,返回 false。

示例

#include 
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 
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),因为它没有使用任何额外的空间。

结论

在本教程中,用户学会了检查字符串中是否包含有效的大写字符。我们学习了两种不同的方法。在第一种方法中,我们将问题分解为三个部分,在第二种方法中,我们检查相邻元素的字符大小写。然而,这两种代码的时间和空间复杂度相似,但第二种方法的代码更易读。

相关专题

更多
js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

257

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

208

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1465

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

619

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

550

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

545

2024.04.29

go语言字符串相关教程
go语言字符串相关教程

本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

161

2025.07.29

c++字符串相关教程
c++字符串相关教程

本专题整合了c++字符串相关教程,阅读专题下面的文章了解更多详细内容。

81

2025.08.07

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

9

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP基础入门课程
PHP基础入门课程

共33课时 | 1.9万人学习

走进 ES6 新标准语法
走进 ES6 新标准语法

共15课时 | 1.5万人学习

Redis中文开发手册
Redis中文开发手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号