【C语言】字符串 和 ctype.h 中的函数 练习

前面总结了有关字符串和ctype.h的文章,接下来就以几个例子来练习一下,以巩固之前的基础概念。
  • 注意:以下示例都有更简单更高效的解决方法,但本次仅以巩固基础为目的,所以方法可能稍作繁琐
  1. Leetcode 344.反转字符串

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

  • 示例 1:
    输入:s = [“h”,“e”,“l”,“l”,“o”]
    输出:[“o”,“l”,“l”,“e”,“h”]

  • 示例 2:
    输入:s = [“H”,“a”,“n”,“n”,“a”,“h”]
    输出:[“h”,“a”,“n”,“n”,“a”,“H”]

提示:

  • 1 <= s.length <= 105
  • s[i] 都是 ASCII 码表中的可打印字符
/*将首尾数据互换,直至逼近中间的一个或两个数据,这样即可完成反转字符串	
*/
#include <stdio.h>
#include <string.h> // for strlen// 利用传址的方式实现数据互换(不可以用传值方式)
void swap(char *a, char *b){char c = *a;*a = *b;*b = c;
}void reverseString(char* s, int sSize) {for (int i = 0; i < sSize / 2; i++){swap(s + i, s + sSize - i - 1);}
}int main(){char s[] = "This is a Test";printf("Primary string: %s\n", s);int size = strlen(s);reverseString(s, size);printf("Reverse string: %s\n", s);return 0;
}
  • 输出结果
    输出结果

2. Leetcode 125. 验证回文串

如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串字母和数字都属于字母数字字符。 给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 。

  • 示例 1:
    输入: s = “A man, a plan, a canal: Panama”
    输出:true
    解释:“amanaplanacanalpanama” 是回文串。

  • 示例 2:
    输入:s = “race a car”
    输出:false
    解释:“raceacar” 不是回文串。

  • 示例 3:
    输入:s = " "
    输出:true
    解释:在移除非字母数字字符之后,s 是一个空字符串 “” 。
    由于空字符串正着反着读都一样,所以是回文串。

提示:

  • 1 <= s.length <= 2 * 105
  • s 仅由可打印的 ASCII 字符组成
/*1. 首先通过函数filter_ch将含有标点符号、空白字符的字符串转为一个只含有小写字母和数字的字符串2. 首尾字符一样的,直至逼近中间的一个和两个全部一样,那么就是回文的 
*/#include <stdio.h>
#include <ctype.h> // 之前总结的
#include <stdbool.h> // 以后开一个新章节介绍
#include <string.h> // for strlen 计算字符串长度// 利用传址方式,将源字符串中的所有字母转为小写字母
void filter_ch(char *s) {int i = 0, j = 0;while(s[i]) {if(isalnum(s[i])) { // 等价 isalpha(s[i]) || isdigit(s[i])s[j] = tolower(s[i]);j++;}i++;}s[j] = '\0';
}bool isPalindrome(char* s) {filter_ch(s);int size = strlen(s); // 计算的是纯小写字母的长度for (int i = 0; i < size / 2; i++) {if (*(s + i) != *(s + size - i - 1)) {return false;}}return true;
}int main() {char s[100] = "A man, a plan, a canal: Panama";if (isPalindrome(s)) {printf("The string is a palindrome.\n");} else {printf("The string is not a palindrome.\n");}return 0;
}

3. Leetcode 709. 转换成小写字符

给你一个字符串 s ,将该字符串中的大写字母转换成相同的小写字母, 返回新的字符串。

  • 示例 1:
    输入:s = “Hello”
    输出:“hello”

  • 示例 2:
    输入:s = “here”
    输出:“here”

  • 示例 3:
    输入:s = “LOVELY”
    输出:“lovely”

提示:

  • 1 <= s.length <= 100
  • s 由 ASCII 字符集中的可打印字符组成
/*直接用tolower函数就行了   哈哈哈开句玩笑下面有具体的实现方法
*/#include <stdio.h>
#include <string.h> // for strlen 计算字符串长度// tolower 函数的实现方法
int my_tolower(int c) {if (c >= 'A' && c <= 'Z') {c += 'a' - 'A'; // 字符型是以ASCII码的形式存储的}return c;
}char* toLowerCase(char* s) {int size = strlen(s);for (int i = 0; i < size; i++){s[i] = my_tolower(s[i]);}return s;
}int main() {char str[] = "Hello World";printf("Primary string: %s\n", str);toLowerCase(str);printf("New string: %s\n", str);return 0;
}
  • ASCII码的简单介绍
    ASCII码的简单介绍
    图中0的ASCII码记录十进制为48,A的十进制为65,a的十进制97
    在C语言中有,
    • 字符型 ‘9’ - ‘0’ 等价为 整型 9
    • ‘B’ + (‘a’ - ‘A’) 等价为 ‘B’ + ‘32’ 等价为 ‘b’

4. Leetcode 520.检测大写字母

我们定义,在以下情况时,单词的大写用法是正确的:

  • 全部字母都是大写,比如 “USA” 。
  • 单词中所有字母都不是大写,比如 “leetcode” 。
  • 如果单词不只含有一个字母,只有首字母大写, 比如 “Google” 。

给你一个字符串 word 。如果大写用法正确,返回 true ;否则,返回 false 。

  • 示例 1:
    输入:word = “USA”
    输出:true

  • 示例 2:
    输入:word = “FlaG”
    输出:false

提示:

  • 1 <= word.length <= 100
  • word 由小写和大写英文字母组成
#include <stdio.h>
#include <stdbool.h>
#include <ctype.h>bool detectCapitalUse(char* word) {// 情况1:全部字母都是大写bool allUppercase = true;for (int i = 0; word[i] != '\0'; i++) {if (!isupper(word[i])) {allUppercase = false;break;}}if (allUppercase) {return true;}// 情况2:单词中所有字母都不是大写bool allLowercase = true;for (int i = 0; word[i] != '\0'; i++) {if (isupper(word[i])) {allLowercase = false;break;}}if (allLowercase) {return true;}// 情况3:只有首字母大写if (isupper(word[0]) && islower(word[1])) {bool remainingLowercase = true;for (int i = 2; word[i] != '\0'; i++) {if (isupper(word[i])) {remainingLowercase = false;break;}}if (remainingLowercase) {return true;}}return false;
}int main() {const char *word1 = "USA";const char *word2 = "leetcode";const char *word3 = "Google";printf("%s\n", detectCapitalUse(word1) ? "true" : "false");  // 输出: trueprintf("%s\n", detectCapitalUse(word2) ? "true" : "false");  // 输出: trueprintf("%s\n", detectCapitalUse(word3) ? "true" : "false");  // 输出: truereturn 0;
}

如果对算法和刷题有兴趣的话,我在此推荐几个高质量的网站。

  1. 刷题网站
  • Leetcode
  • 洛谷
  • codeforces
  1. 算法学习
  • labuladong算法笔记
  • hello-algorithm

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/595833.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【第5期】前端Vue使用Proxy+Vuex(store、mutations、actions)跨域调通本地后端接口

本期简介 本期要点 本地开发前后端如何跨域调用全局请求、响应处理拦截器处理封装HTTP请求模块编写API请求映射到后端API数据的状态管理 一、 本地开发前后端如何跨域调用 众所周知&#xff0c;只要前端和后端的域名或端口不一样&#xff0c;就存在跨域访问&#xff0c;例如&…

数模学习day07-基于熵权法对Topsis模型的修正

初步理解 这里看看就好 熵权法是一种常用的多指标综合评价方法&#xff0c;通过计算指标的熵值来确定各指标的权重。而Topsis模型则是一种常用的多指标决策模型&#xff0c;用于评估不同方案的优劣。 在基于熵权法的Topsis模型中&#xff0c;可以对熵权法进行一些修正来提高模型…

在word文档中自制代码段样式

附&#xff1a; 在word中插入高亮代码的网站 HighlightCode&#xff1a;https://highlightcode.com/ CodeInWord&#xff1a;http://codeinword.com/ 一、新建代码段样式 点击下拉按钮&#xff0c;选择创建样式&#xff0c;命名为代码段&#xff0c;然后点击修改 点击格式&a…

【Linux驱动】Linux中断(二)—— 按键中断驱动

前一篇已经在设备树的 gpio-led 节点中引入了中断信息&#xff0c;接下来将通过API来获取设备树中的中断信息。gpio-led 节点具体内容如下&#xff1a; gpio-key0 {pinctrl-names "default";pinctrl-0 <&pinctrl_gpio_keys>; // pinctrl子系…

linux性能优化

文章目录 性能优化图CPU进程和cpu原理性能指标 性能优化图 CPU 进程和cpu原理 进程与线程&#xff1a; 进程是程序的执行实例&#xff0c;有自己的地址空间和系统资源。线程是进程内的执行单元&#xff0c;共享进程的资源。在多核系统中&#xff0c;使用多线程可以更好地利用多…

【JS逆向】某乐网登陆密码加密逆向分析探索!

一个网站的登陆密码加密逆向解密分析&#xff0c;没有混淆&#xff0c;加密代码还是比较好找的&#xff0c;只需要多花点耐心&#xff0c;多尝试&#xff0c;就能找到关键的加密代码片段。 网址&#xff1a; aHR0cHMlM0EvL29hdXRoLmQuY24vYXV0aC9nb0xvZ2luLmh0bWw 登陆密码加密…

炼石免改造加密亮相2023商密大会,参编密评行业报告发布

2023年8月9-11日&#xff0c;2023商用密码大会在河南省郑州国际会展中心圆满召开&#xff0c;是我国商密领域规格最高、规模最大、影响最广的全国性商用密码盛会&#xff0c;也是《密码法》和新修订的《商用密码管理条例》正式实施以来的第一次全国性的盛会。大会以“密码赋能美…

excel 插件:Rainbow Analyst Crack

一个插件中包含四种 EXCEL 审核工具检测并修复隐藏的电子表格错误 不要满足于更少&#xff0c;四种领先的电子表格审计工具合二为一 Rainbow Analyst&#xff08;因其对颜色编码的独特强大使用而得名&#xff09;结合了世界级电子表格审核功能的多个领域&#xff1a; Excel™ …

关于如何设计出优秀的 URL

Kyle Aster 在 2010 年就写过为什么认真设计 URL 很重要&#xff1a; URL 是通用的&#xff0c;它们适用于 Firefox, Chrome, Safari, Internet Explorer, cURL, wget, 以及 iPhone&#xff0c;Android, 甚至便签。它们是网络的唯一通用语法&#xff0c;不要把这当作理所当然。…

LCR 145. 判断对称二叉树

解题思路&#xff1a; class Solution {public boolean checkSymmetricTree(TreeNode root) {return root null || recur(root.left, root.right);}boolean recur(TreeNode L, TreeNode R) {if(L null && R null) return true;if(L null || R null || L.val ! R.v…

Java 深入理解 AQS 和 CAS 原理

AQS 介绍 AQS 全称是 Abstract Queued Synchronizer&#xff0c;一般翻译为同步器。它是一套实现多线程同步功能的框架&#xff0c;由大名鼎鼎的 Doug Lea 操刀设计并开发实现的。AQS 在源码中被广泛使用&#xff0c;尤其是在 JUC&#xff08;Java Util Concurrent&#xff09;…

天融信Topgate搭建

一、下载防火墙 首先下载防火墙&#xff0c;在虚拟机中打开。 二、网卡配置 防火墙设备上有5块网卡&#xff0c;分别对应接口eth1~5 这里要手动添加&#xff0c;还有需要注意vmnet1&#xff0c;他的必须是192.168.1.0&#xff0c;并且为DHCP 其它vlan无需设置DHCP 自定义网…

跨站脚本攻击漏洞XSS绕过22种方式总结

XSS漏洞简介 跨站脚本攻击在目前这个时间节点还是属于一个排位比较高的漏洞&#xff0c;在OWASP TOP10 2021中隶属于注入型漏洞&#xff0c;高居TOP3的排位&#xff0c;可见这个漏洞的普遍性。跨站脚本攻击的学习中我们主要需要明白的是跨站的含义&#xff0c;以及XSS的核心。…

企业数据存储监控

随着组织及其网络基础架构的不断扩展&#xff0c;存储将不可避免地成为一项挑战&#xff0c;随着存储需求的增长&#xff0c;调配更多存储资源的需求也会随之增长。为基础架构配置了更多存储资源后&#xff0c;它们需要不间断地运行&#xff0c;并且应该免受威胁。从本质上讲&a…

Syn_SegNet:用于常规 3T MRI 中超高场 7T MRI 合成和海马亚场分割的联合深度神经网络

Syn_SegNet: A Joint Deep Neural Network for Ultrahigh-Field 7T MRI Synthesis and Hippocampal Subfield Segmentation in Routine 3T MRI Syn_SegNet&#xff1a;用于常规 3T MRI 中超高场 7T MRI 合成和海马亚场分割的联合深度神经网络背景贡献实验为了确定哪个模态分割最…

list1.Sort((m, n) => m.Id - n.Id); id是double类型的为什么回报错

问题产生的地方 原因 对于 double 类型的属性&#xff0c;不能直接使用减法运算符进行比较。减法运算符只能用于数值类型&#xff0c;而 double 是浮点数类型。 要在 double 属性上进行排序&#xff0c;可以使用 CompareTo 方法或者使用自定义的比较器。 更改 要在 double 属性…

K8s 源码剖析及debug实战之 Kube-Scheduler(五):优选算法详解

文章目录 0. 引言1. 回顾2. PrioritizeNodes3. 有哪些优选算法4. selectHost5. 总结6. 参考 0. 引言 欢迎关注本专栏&#xff0c;本专栏主要从 K8s 源码出发&#xff0c;深入理解 K8s 一些组件底层的代码逻辑&#xff0c;同时借助 debug Minikube 来进一步了解 K8s 底层的代码…

鸿蒙应用中图片的显示(Image组件)

目录 1、加载图片资源 1.1、存档图类型数据源 a.本地资源 b.网络资源 c.Resource资源 d.媒体库file://data/storage e.base64 1.2、多媒体像素图片 2、显示矢量图 3、添加属性 3.1、设置图片缩放类型 3.2、设置图片重复样式 3.3、设置图片渲染模式 3.4、设置图…

Go语言基本数据类型

Go语言基本数据类型 1.整型2.浮点型3.复数4.布尔型5.字符串窥探字符串类型字符串内建函数UTF-8编码字符串处理相关的四个包字符串和数字的转换 6.常量 1.整型 Go语言同时提供了有符号和无符号类型的整数运算。这里有int8、int16、int32和int64四种截然不同大小的有符号整数类型…

基于springboot公租房申请管理系统

开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven…