c/c++静态字符串的基本操作

news2024/11/27 6:30:50

文章目录

  • 1.串的定义
  • 2. 赋值操作
  • 3.字符串复制操作
  • 4.判断空
  • 5.比较操作
  • 6.求串的长度
  • 7.打印全部元素
  • 8.求字串
  • 9.串拼接
  • 10.清空操作
  • 11.源代码

  在本篇博客中,定义的字符串为索引1为起始下标。

1.串的定义

#define MAXLEN 255  //预定义最大串长255
typedef struct {
	char ch[MAXLEN];  //每个分量存储一个字符
	int length;       //串的实际长度
}SString;

2. 赋值操作

bool StrAssign(SString &T)
{
	//将字符串charts存放到定义的字符串中
	char arr[10] = "charts";
	int lenArr = strlen(arr);
	int i = 0;
	for (i = 0; i < lenArr; ++i)
	{
		T.ch[i + 1] = arr[i];
		T.length++;
	}
	T.ch[i+1] = 0;
	return true;
}

3.字符串复制操作

bool StrCopy(SString S)
{
	char arr[10] = { 0 };
	//将字符串S中的值复制到arr中
	int i = 0;
	while (arr[i] = S.ch[i + 1])
	{
		i++;
	}
	//打印arr查看复制的结果
	int lenArr = strlen(arr);
	cout << "复制字符串arr的结果:";
	for (int i = 0; i < lenArr; ++i)
	{
		cout << arr[i];
	}
	cout << endl;
	return true;
}

4.判断空

bool StrEmpty(SString S)
{
	if (S.length == 0)
		return true;
	return false;
}

5.比较操作

int StrCompare(SString S)
{
	char T[10] = "chaabc";
	//若S>T,返回值1
	//若S==T,返回值0
	//若S<T,返回值-1
	int i = 0;
	while (T[i] == S.ch[i + 1])
	{
		i++;
	}
	if (S.ch[i + 1] > T[i])
		return 1;
	else if (S.ch[i + 1] == T[i])
		return 0;
	else
		return -1;

}

6.求串的长度

int StrLength(SString S)
{
	return S.length;
}

7.打印全部元素

void PrintSString(SString S)
{
	for (int i = 1; i <= S.length; ++i)
	{
		cout << S.ch[i];
	}
	cout << endl;
}

8.求字串

int SubString(int &Sub,SString S)
{
	char pos[] = "ar";
	int lenPos = strlen(pos);
	int i = 1, j = 0;
	while (i <= S.length && j < lenPos)
	{
		if (S.ch[i] == pos[j])
		{
			++i;
			++j;   //继续比较后续字符串
		}
		else {
			i = i - j + 1;
			j = 0;
		}
	}
	if (j >= lenPos)
	{
		Sub =  i - lenPos;
	}
	else
	{
		Sub = -1;
	}
		
	return Sub;
}

9.串拼接

void Concat(char s1[], char s2[])
{
	int i = 0, j = 0;;
	char T[30] = { 0 };
	while (T[i] = s1[i])
	{
		i++;
	}
	while (T[i] = s2[j])
	{
		i++,j++;
	}
	cout << "拼接后的字符出:";
	printf("%s", T);
	cout << endl;
}

10.清空操作

bool ClearString(SString S)
{
	S.length = 0;
	return true;
}

11.源代码

#include<iostream>
using namespace std;
#define MAXLEN 255  //预定义最大串长255
typedef struct {
	char ch[MAXLEN];  //每个分量存储一个字符
	int length;       //串的实际长度
}SString;


//赋值操作
bool StrAssign(SString &T)
{
	//将字符串charts存放到定义的字符串中
	char arr[10] = "charts";
	int lenArr = strlen(arr);
	int i = 0;
	for (i = 0; i < lenArr; ++i)
	{
		T.ch[i + 1] = arr[i];
		T.length++;
	}
	T.ch[i+1] = 0;
	return true;
}

//字符串复制操作
bool StrCopy(SString S)
{
	char arr[10] = { 0 };
	//将字符串S中的值复制到arr中
	int i = 0;
	while (arr[i] = S.ch[i + 1])
	{
		i++;
	}
	//打印arr查看复制的结果
	int lenArr = strlen(arr);
	cout << "复制字符串arr的结果:";
	for (int i = 0; i < lenArr; ++i)
	{
		cout << arr[i];
	}
	cout << endl;
	return true;
}
//判断空
bool StrEmpty(SString S)
{
	if (S.length == 0)
		return true;
	return false;
}

//比较操作
int StrCompare(SString S)
{
	char T[10] = "chaabc";
	//若S>T,返回值1
	//若S==T,返回值0
	//若S<T,返回值-1
	int i = 0;
	while (T[i] == S.ch[i + 1])
	{
		i++;
	}
	if (S.ch[i + 1] > T[i])
		return 1;
	else if (S.ch[i + 1] == T[i])
		return 0;
	else
		return -1;

}

//求串的长度
int StrLength(SString S)
{
	return S.length;
}
//打印全部元素
void PrintSString(SString S)
{
	for (int i = 1; i <= S.length; ++i)
	{
		cout << S.ch[i];
	}
	cout << endl;
}

//求字串
int SubString(int &Sub,SString S)
{
	char pos[] = "ar";
	int lenPos = strlen(pos);
	int i = 1, j = 0;
	while (i <= S.length && j < lenPos)
	{
		if (S.ch[i] == pos[j])
		{
			++i;
			++j;   //继续比较后续字符串
		}
		else {
			i = i - j + 1;
			j = 0;
		}
	}
	if (j >= lenPos)
	{
		Sub =  i - lenPos;
	}
	else
	{
		Sub = -1;
	}
		
	return Sub;
}

//串拼接
void Concat(char s1[], char s2[])
{
	int i = 0, j = 0;;
	char T[30] = { 0 };
	while (T[i] = s1[i])
	{
		i++;
	}
	while (T[i] = s2[j])
	{
		i++,j++;
	}
	cout << "拼接后的字符出:";
	printf("%s", T);
	cout << endl;
}

//清空操作
bool ClearString(SString S)
{
	S.length = 0;
	return true;
}

int main()
{
	

	SString S;
	S.length = 0;
	//字符串的第一个位置存放字符串的长度
	S.ch[0] = S.length;

	//赋值操作
	StrAssign(S);

	cout << "字符串为:";
	PrintSString(S);
	cout << "字符串长度:" << S.length << endl;

	//字符串复制操作
	StrCopy(S);

	//判断空
	cout<<"字符串" << (StrEmpty(S)?"不为" : "为") << "空"<<endl;

	//比较操作
	int tmp = StrCompare(S);
	cout << "比较操作结果:" << tmp << endl;

	//求串的长度
	int len = StrLength(S);
	cout << "字符串长度:" << len << endl;

	//求字串
	int Sub = 0;
	SubString(Sub, S);
	cout << "字串索引为:" << Sub<<endl;

	//串拼接
	char s1[15] = "Hello ";
	char s2[15] = "World!";
	Concat(s1, s2);

	//清空操作
	ClearString(S);

	
	return 0;
}

在这里插入图片描述
看到这里了,点一个关注吧!

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

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

相关文章

从[redis:LinkedList]中学习链表

文章目录 adlistlistNodelistmacros[宏定义]listCreatelistInitNodelistEmptylistReleaselistAddNodeHeadlistLinkNodeHeadlistAddNodeTaillistLinkNodeTaillistInsertNodelistDelNodelistUlinkNodelistIndexredis3.2.100quicklistredis7.2.2quicklist redis的基本数据类型之一…

【代码随想录】LC 77. 组合

文章目录 前言一、题目1、原题链接2、题目描述 二、解题报告1、思路分析2、代码详解 前言 本专栏文章为《代码随想录》书籍的刷题题解以及读书笔记&#xff0c;如有侵权&#xff0c;立即删除。 一、题目 1、原题链接 77. 组合 2、题目描述 二、解题报告 1、思路分析 &#x…

C++类和对象(中)六个默认成员函数

&#x1f308;类的六个默认成员函数 任何一个类&#xff0c;不管是否为空&#xff0c;都会在生成的时候默认调用六个成员函数&#xff0c;这些成员函数可以自动生成&#xff0c;也可以由程序员写出。这六个默认成员函数分别是&#xff1a; 最主要的是前四个&#xff1a; 初始…

2-树-恢复二叉搜索树

这是树的第二篇算法&#xff0c;力扣链接。 给你二叉搜索树的根节点 root &#xff0c;该树中的 恰好 两个节点的值被错误地交换。请在不改变其结构的情况下&#xff0c;恢复这棵树 。 示例 1&#xff1a; 输入&#xff1a;root [1,3,null,null,2] 输出&#xff1a;[3,1,null,…

Google Gemini Pro 国内版

Google Gemini Pro 国内版&#xff1a;【直达链接】 Google Gemini Pro 国内版 能力分类基准测试描述更高分数更好Gemini UltraGPT-4通用MMLU57个主题&#xff08;包括STEM、人文等&#xff09;的问题表示是90.0%86.4%&#xff08;5-shot, 报告&#xff09;推理Big-Bench Hard…

linux系统上C程序的编译、运行及调试-gcc

gcc -o timer timer.c &#xff1a;生成可执行文件main&#xff0c;依托main.c,也可依托多个文件./timer :运行代码

C# 根据USB设备VID和PID 获取设备总线已报告设备描述

总线已报告设备描述 DEVPKEY_Device_BusReportedDeviceDesc 模式 winform 语言 c# using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Window…

【软件设计师笔记】计算机系统基础知识考点

&#x1f413; 计算机系统组成 计算机系统是由硬件和软件组成的&#xff0c;它们协同工作来运行程序。计算机的基本硬件系统由 运算器、控制器、存储器、输入设备和输出设备5大部件组成。运算器、控制器等部件被集成 在一起统称为中央处理单元&#xff08;Central Processing …

幻兽帕鲁服务器怎么更新?教你一行命令搞定!

今天发现幻兽帕鲁又进行了一次更新&#xff0c;所以我们的服务器也是需要同步更新的 那么&#xff0c;我们通过阿里云或腾讯云一键部署的幻兽帕鲁服务器怎么更新呢&#xff1f; 腾讯云轻量云一键部署幻兽帕鲁服务器教程&#xff1a;https://curl.qcloud.com/pzBO9wN7 先来讲…

短视频去水印教程,免费一键获取视频、图片、文案【迅风去水印】

自媒体行业的蓬勃发展&#xff0c;让越来越多的创作者涌入其中。然而&#xff0c;剪辑过程中常常遭遇到一个令人头疼的问题&#xff0c;那就是视频或图片上的水印。这些水印不仅会影响到作品的美感&#xff0c;还可能侵犯到版权。为了帮大家解决这一难题&#xff0c;分享一个免…

HTML 样式学习手记

HTML 样式学习手记 在探索网页设计的世界时&#xff0c;我发现HTML元素的样式调整真的是个很酷的环节。通过简单的属性设置&#xff0c;就能让文字换上五彩斑斓的颜色、变换各异的字体和大小。特别是那个style属性&#xff0c;感觉就像是一扇通往CSS魔法世界的大门。 代码小试…

uniapp微信小程序触底加载(超简单)

你在哪个页面需要就给他在page.json里面填写以下代码&#xff0c;表示距离底部还有50px就触发 1.page.json添加以下代码 "onReachBottonDistance":50 这是文档链接 页面 | uni-app官网 (dcloud.net.cn) 2. 页面中写以下代码 onReachBottom(e) {console.log(&quo…

【Git】01 Git介绍与安装

文章目录 一、版本控制系统二、Git三、Windows安装Git3.1 下载Git3.2 安装3.3 检查 四、Linux安装Git4.1 YUM安装4.2 源码安装 五、配置Git5.1 配置用户名和邮箱5.2 配置级别5.3 查看配置 六、总结 一、版本控制系统 版本控制系统&#xff0c;Version Control System&#xff…

Rhino 8.1下载安装教程,保姆级教程,小白也能轻松搞定,附安装包和工具

前言 Rhinoceros,又叫犀牛&#xff0c;是一款小巧强大的高级三维建模工具&#xff0c;适用于机械设计、科学工业、三维动画等广泛领域。它包含了所有的NURBS建模功能&#xff0c;用它建模感觉非常流畅&#xff0c;所以大家经常用它来建模&#xff0c;然后导出高精度模型给其他…

ElementUI Form:Input 输入框

ElementUI安装与使用指南 Input 输入框 点击下载learnelementuispringboot项目源码 效果图 el-input.vue &#xff08;Input 输入框&#xff09;页面效果图 项目里el-input.vue代码 <script> export default {name: el_input,data() {return {input: ,input1: ,i…

了解 WebSocket 和 TCP :有何不同

WebSocket — 双向通讯的艺术 简要概述 WebSocket 代表着WebSocket通讯协议&#xff0c;提供了一条用于客户端和服务器间实现实时、双向、全双工通信的渠道。在WebSocket引入之前&#xff0c;网页应用的数据更新依赖于频繁的轮询&#xff0c;这种做法不仅效率低下&#xff0c;…

上位机是什么?与下位机是什么关系

在工业自动化领域中&#xff0c;上位机是一项关键而引人注目的技术。许多人对上位机的概念感到好奇&#xff0c;想要深入了解其在工业智能中的作用。那么&#xff0c;上位机究竟是什么呢&#xff1f; 首先&#xff0c;上位机是一种用于工业控制系统的软件应用&#xff0c;通常…

elementUI中表单校验的清空校验以及手动校验

this.$refs.表单.clearValidate(),这个可以传入字符串或者字符串数组&#xff0c;字符串对应的是我们自定义的rule里面的属性名&#xff0c;rule的属性名对应的是el-form-item的prop。这个api目前遇到的场景是el-radio切换时v-if展示不同的表单内容&#xff0c;但是当有校验提示…

把成绩私发给家长

与家长保持及时、有效的沟通对于学生的成长至关重要。但有时候&#xff0c;我会选择将学生的成绩私发给家长&#xff0c;而不是在公共场合公布。这样做有以下几个原因。 保护学生的隐私。每个学生都拥有自己的个人信息&#xff0c;这包括学习成绩。在公共场合公布成绩&#xf…

前后端项目

文章目录 1.需求2.项目搭建2.1项目结构图2.2构建聚合工程2.2.1 zx-parent父工程2.2.2 zx-framework父工程2.2.2.1 zx-common工程2.2.2.2 zx-mybatisplus工程2.2.3 如上,同理创建其他父子工程2.3准备sql3.用户登录3.1 修改pom-依赖其他Module3.2 封装User1.需求 在线学习平台 …