(17)求字符串长度(进阶版)(18)逆序字符串(19)求数字的每一位之和(20)判断回文字符串

文章目录

  • 1. 每日一言
  • 2. 题目(17)求字符串长度(进阶版)
  • 3. 解题思路
  • 4. 代码
  • 5. 题目(18)逆序字符串
  • 6. 解题思路
  • 7. 代码
  • 8. 题目(19)求数字的每一位之和
  • 9. 解题思路
  • 10. 代码
  • 11. 题目(20)判断回文字符串
  • 12. 解题思路
  • 13. 代码
  • 14. 结语

1. 每日一言

飒爽英姿闯江湖,诗酒茶话莫孤独。 --飒


2. 题目(17)求字符串长度(进阶版)

写一个Strlen函数,求字符串长度,除了函数的形参,函数中不能使用多余的变量。

3. 解题思路

既然题目说函数中不能再创建新的变量,那就不创建,我们可以使用递归来解决

  1. 编写一个函数Strlen,判断字符串的每个字符
  2. 如果该字符不是’\0’,那就返回一加上该字符被Strlen调用后的结果

4. 代码

#include<stdio.h>

int Strlen(char* str)
{
	if (*str == '\0')
		return 0;
	else
	{
		return Strlen(str + 1) + 1;
	}
}

int main()
{
	char str[100] = { 0 };
	gets(str);
	printf("字符串的长度为:%d", Strlen(str));
	return 0;
}

5. 题目(18)逆序字符串

输入一个字符串,写一个函数将一个字符串的内容逆序过来

6. 解题思路

定义两个字符串指针,分别指向字符串的第一个字符和最后一个字符,让这两个字符交换,之后让第一个指针向后走,指向第二个字符,让第二个指针向前走,指向倒数第二个字符,重复以上过程,直到两个指针相遇。

7. 代码

#include<stdio.h>

void reverse(char* arr)
{
	char* head = arr;
	char* last = head;

	while (*last) {//让第二个指针指向字符串的最后一个字符
		last++;
	}
	last--;//这里减1是因为不交换最后的\0

	while (last > head) {
		char tmp = *head;
		*head = *last;
		*last = tmp;
		head++;//第一个指针向后走
		last--;//第二个指针向前走
	}
}

int main()
{
	char arr[100] = { 0 };
	gets(arr);
	reverse(arr);
	puts(arr);
	return 0;
}

在上述的reverse函数中,让第二个指针指向最后一个字符可以用strlen 来写

#include<stdio.h>
#include<string.h>

void reverse(char* arr)
{
	//while (*last) {//让第二个指针指向字符串的最后一个字符
	//	last++;
	//}
	//last--;//这里减1是因为不交换最后的\0
	
	char* last = arr + strlen(arr) -1 ;
	//以上的代码可以用这个来替换
	
	char* head = arr;

	while (last > head) {
		char tmp = *head;
		*head = *last;
		*last = tmp;
		head++;//第一个指针向后走
		last--;//第二个指针向前走
	}
}

int main()
{
	char arr[100] = { 0 };
	gets(arr);
	reverse(arr);
	puts(arr);
	return 0;
}

8. 题目(19)求数字的每一位之和

输入一个整数n,求这个整数n的每一位之和,并打印

9. 解题思路

按照题意,假如 n=257 那么输出结果应该是 14 (2+5+7)
很容易想到,把n的每一位拿下来逐个相加就行了

现在问题来了,怎么把每一位拿下来呢?
答:我们可以用取模操作符 %

257 如何拿到个位的7 ?
让257%10就得到啦~

如何拿到十位的5?
让257/10%10

如何拿到百位的2?
让257/10/10%10

既然理论成立,开始实践~

10. 代码

#include<stdio.h>
int main()
{
	int n = 0;//输入的数字
	int sum = 0;//每一位之和
	scanf("%d", &n);
	while (n)
	{
		sum += n % 10;//把每一位拿下来
		n /= 10;//让n除以10,以便于继续拿下一位
	}
	printf("它的每一位之和为:%d", sum);
	return 0;
}

11. 题目(20)判断回文字符串

输入一个字符串,判断这个字符串是否是回文字符串,如果是则输出Yes,如果不是则输出No

先解释一下什么是回文字符串,他指的是一个字符串正着读和倒着读都一样,比如说:asddsa

12. 解题思路

这道题与逆序字符串有点相似

定义两个字符串指针,让这两个指针分别指向字符串的第一个字符和最后一个字符。接着判断两个指针指向的字符是否相等,如果相等,让第一个指针向后走,第二个向前走。重复以上过程,直到两个指针相遇或者两个指针指向的字符不相等

13. 代码

#include<stdio.h>
#include<string.h>
int is_palindromic_strings(char arr[])
{
	char* p1 = arr;
	char* p2 = arr + strlen(arr) -1;
	while (p1 < p2)//
	{
		if (*p1 == *p2)
		//如果两个指针指向的字符相等就继续走
		{
			p1++;//p1向后走
			p2--;//p2向前走
		}
		else
		//如果两个指针指向的字符不相等就跳出循环
			break;
	}
	if (p1 < p2)//循环异常终止
		return 0;
	return 1;//循环正常终止
}

int main()
{
	char arr[100] = { 0 };
	gets(arr);
	if (is_palindromic_strings(arr))
		printf("Yes");
	else
		printf("No");

	return 0;
}

其实以上的代码还可以再优化一下

#include<stdio.h>
#include<string.h>

int is_palindromic_strings(char arr[])
{
	char* p1 = arr;
	char* p2 = arr + strlen(arr) -1;
	
	while (p1 < p2)
	{
		if (*p1 == *p2)//如果两个指针指向的字符相等就继续走
		{
			p1++;//p1向后走
			p2--;//p2向前走
		}
		else//如果两个指针指向的字符不相等就跳出函数
			return 0;
	}
	return 1;//循环正常终止
}

int main()
{
	char arr[100] = { 0 };
	gets(arr);
	if (is_palindromic_strings(arr))
		printf("Yes");
	else
		printf("No");

	return 0;
}

14. 结语

请给自己些耐心,一口吃不成胖子。
山外青山楼外楼,莫把百尺当尽头。
保持空杯心态加油努力吧!


都看到这里啦!真棒(*^▽^*)

可以给作者一个免费的赞赞吗,这将会鼓励我继续创作,谢谢大家

编程小白写作,如有纰漏或错误,欢迎指正


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录阅读笔记-哈希表【三数之和】

题目 给你一个包含 n 个整数的数组 nums&#xff0c;判断 nums 中是否存在三个元素 a&#xff0c;b&#xff0c;c &#xff0c;使得 a b c 0 &#xff1f;请你找出所有满足条件且不重复的三元组。 注意&#xff1a; 答案中不可以包含重复的三元组。 示例&#xff1a; 给定数…

Python之Web开发中级教程----搭建虚拟环境

Python之Web开发中级教程----搭建Web框架二 搭建虚拟环境 虚拟环境的作用 虚拟环境可以搭建独立的python运行环境, 使得单个项目的运行环境与其它项目互不影响. 搭建虚拟环境 &#xff08;1&#xff09;安装 sudo pip install virtualenv sudo pip install virtualenvwra…

一起学数据分析_2

写在前面&#xff1a;代码运行环境为jupyter&#xff0c;如果结果显示不出来的地方就加一个print()函数。 一、数据基本处理 缺失值处理&#xff1a; import numpy as np import pandas as pd#加载数据train.csv df pd.read_csv(train_chinese.csv) df.head()# 查看数据基本…

Vue3-响应式基础:单文件和组合式文件

单文件&#xff1a;html <!DOCTYPE html> <html> <head><title>响应式基础</title> </head> <body><div id"app" ><!-- dynamic parameter:同样在指令参数上也可以使用一个 JavaScript 表达式&#xff0c;需要包…

简易版 RPC 框架实现 1.0 -http实现

RPC 是“远程过程调用&#xff08;Remote Procedure Call&#xff09;”的缩写形式&#xff0c;比较通俗的解释是&#xff1a;像本地方法调用一样调用远程的服务。虽然 RPC 的定义非常简单&#xff0c;但是相对完整的、通用的 RPC 框架涉及很多方面的内容&#xff0c;例如注册发…

离散时间傅里叶变换和离散傅里叶变换

离散时间傅里叶变换和离散傅里叶变换 { X ( k ) DFT [ x ( n ) ] ∑ n 0 N − 1 x ( n ) W N n k k 0 , 1 , . . . , N − 1 x ( n ) IDFT [ X ( k ) ] 1 N ∑ n 0 N − 1 x ( n ) W N − n k n 0 , 1 , . . . , N − 1 \begin{cases} X(k)\textbf{DFT}[x(n)]\sum\limi…

解决:IDEA编译Java程序时报编译失败

1、问题展示&#xff1a; 2、解决方法&#xff1a;

Magical Combat VFX

这个包包含30个可供游戏使用的VFX,有各种口味,为您的游戏增添趣味! 所有VFX都经过了很好的优化,可以在所有平台上使用。 这个包特别有一堆闪电魔法,有两种主要的变体,一种是深色的,另一种是浅色的。但它也提供了一系列其他视觉效果,如神圣咒语、音乐主题等等! 我们提供…

【CSP】2021-09-2 非零段划分 索引+递推/差分+前缀和

2021-09-2 非零段划分 索引递推/差分前缀和 2021-09-2 非零段划分 索引递推/差分前缀和索引递推思路差分前缀和思路遇到的问题索引递推完整代码差分前缀和完整代码 2021-09-2 非零段划分 索引递推/差分前缀和 一开始写的时候没有发现直接从a数组求q的规律&#xff0c;怎么也想…

NCV8705MTADJTCG稳压器芯片中文资料规格书PDF数据手册引脚图图片价格功能

产品概述&#xff1a; NCV8705 是一款低噪音、低功耗和低泄漏线性电压稳压器。该器件具有卓越的噪音和 PSRR 规格&#xff0c;适用于使用视频接收器、成像传感器、音频处理器或需要外部洁净电源的任何部件的产品。NCV8705 使用创新的自适应接地电流电路 可确保轻负载调节下的超…

基于DFA敏感词查询的算法简析

基于DFA敏感词查询的算法简析 1.背景 项目中需要对敏感词做一个过滤&#xff0c;首先有几个方案可以选择&#xff1a; a.直接将敏感词组织成String后&#xff0c;利用indexOf方法来查询。 b.传统的敏感词入库后SQL查询。 c.利用Lucene建立分词索引来查询。 d.利用DFA算法…

3.python安装Selenium框架

1. 命令安装 pip install selenium下载慢,可以换源: pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/查看是否换源成功 pip config get global.index-url安装好后,查看版本信息: pip show selenium2.下载对应的浏览器驱动 https://registry.npmm…

【Elasticsearch】windows安装elasticsearch教程及遇到的坑

一、安装参考 1、安装参考&#xff1a;ES的安装使用(windows版) elasticsearch的下载地址&#xff1a;https://www.elastic.co/cn/downloads/elasticsearch ik分词器的下载地址&#xff1a;https://github.com/medcl/elasticsearch-analysis-ik/releases kibana可视化工具下载…

Vue2 引入使用ElementUI详解

目录 1 安装2 引入2.1 全局引入2.1.1 引入2.1.2 使用 2.2 按需引入2.2.1 引入2.2.2 使用 3 总结 1 安装 推荐使用 npm 的方式安装&#xff0c;它能更好地和 webpack打包工具配合使用。&#xff08;本项目使用安装方式&#xff09; npm i element-ui -S也可以使用其他的包管理…

Notepad++从文件夹查找文本内容

目录 一、背景二、Notepad搜索2.1 测试用例2.2 操作说明 一、背景 在日常的办公、学习或编程中&#xff0c;我们时长会遇到需要在大量文件中搜索特定文本内容的情况&#xff1a; 无论是快速定位某个项目中的代码片段&#xff1b;还是检索文档资料库中的相关信息等。 掌握如何…

蓝桥杯:模拟、枚举

目录 引言一、修剪灌木二、特殊年份三、刷题统计 引言 本篇文章主要介绍蓝桥杯的模拟和枚举的题目&#xff0c;这种题在 B B B 组还是比较简单的&#xff0c;后续也会一直往里加新的真题&#xff0c;加油&#xff01; 一、修剪灌木 标签&#xff1a;第十三届蓝桥杯省赛C B组…

音乐创作利器FL Studio21水果软件助你轻松实现音乐创意

音乐创作利器——FL Studio21水果软件&#xff0c;让你的音乐梦想起航&#xff01; 副标题&#xff1a;一款强大的电脑数码编曲软件&#xff0c;助你轻松实现音乐创意&#xff01; 一、FL Studio21水果软件——音乐制作的得力助手** 在音乐创作的道路上&#xff0c;有一款得心…

uniapp样式穿透修改uview的按钮button图标

需求&#xff1a; 想给按钮icon和text改字体颜色&#xff0c;结果发现图标颜色并没有改变 .u-button{width: 300rpx;background-color: aliceblue;color: #aaaa7f;margin-top: 20rpx; }接下来用样式穿透解决 1、首先&#xff0c;给UI组件包裹一层view <view class"t…

Javaweb学习记录(一)Maven

Maven是一款Java项目管理工具&#xff0c;下面将介绍Maven的实际作用和相关的操作 Maven项目依赖的添加 在Maven项目中添加依赖&#xff0c;通过dependencies标签添加所有依赖&#xff0c;所有依赖都添加在里面&#xff0c;而单个依赖就使用dependency标签添加进项目&#xf…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《考虑抽水蓄能电站参与容量交易辅助服务的双层优化策略》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…
最新文章