【算法入门】字符串基础

这篇具有很好参考价值的文章主要介绍了【算法入门】字符串基础。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【算法入门】字符串基础,算法入门,算法,c++,开发语言

一.字符串引言

1.字符串基础

字符串通常以\0作为结束标志,\0的ASCll码值为0,计算字符串长度时会忽略斜杠零。

二.洛谷P5734详解

1.字符串相关库函数

在讲解题目之前我们先介绍几个关于字符串操作常用的几个库函数

💫(1) strcpy函数 💫

strcpy也叫 拷贝函数 ,头文件为 string.h ,顾名思义它可以将一个字符串数组的内容拷贝到另一个数组中。
strcpy函数原型为:

char *strcat(char *dest, const char *src)

下面通过一段代码演示它的效果:

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

int main()
{
	char ch[20] = "helloworld";
	char arr[10] = "xxxxxx";
	printf("%s", strcpy(ch, arr));
	return 0;
}

因为strcpy函数的返回值是拷贝后数组的地址,所以可以通过链式访问在屏幕上打印出xxxxxx,还需要注意的是拷贝函数目的数组要留够拷贝的空间不然程序会崩溃。

💫(2) strcat函数 💫

strcat函数称为追加拷贝函数 ,头文件为头文件为 string.h
strcat函数原型为:

char *strcat(char *dest, const char *src)

strcat可以找到目标数组的结束标志\0,并用起始数组代替\0。
我们还是用代码来演示他的效果:

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

int main()
{
	char ch[15] = "likou";
	char arr[10] = "luogu";
	printf("%s", strcat(ch, arr));
	return 0;
}


结果:
【算法入门】字符串基础,算法入门,算法,c++,开发语言
这个函数同样需要在目标数组开辟足够的空间,才能 正常追加拷贝

💫(3)strstr函数 💫

strstr函数是字符串查找函数,文件为头文件为 string.h
函数原型为:

char *strstr( const char *arr1, const char *arr2 );

strstr函数可以在arr1数组中查找是否存在arr2数组中的内容,如果存在返回首次出现的地址,不存在则返回空指针 NULL
下面用代码来演示下它的效果:
【算法入门】字符串基础,算法入门,算法,c++,开发语言

以上将几个要用得字符串函数讲解了,接下来我们看题目。

2.题目讲解

  • 我们先来看一下题目:
    【算法入门】字符串基础,算法入门,算法,c++,开发语言
    分析: 题目考察了四个字符串的操作,只要我们掌握以上几个函数,还有熟练运用 数组下标 和字符串的 结束标志 即可。
    逻辑分析与代码编写:

我们先根据题目写出整体的逻辑:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <iostream>

using namespace std;

char ch[110];
char in[110];

int main()
{
	int count;
	cin >> count;
	cin >> ch;
	while (count--)
	{
		int input;
		scanf("%d", &input);
		if (input == 1)
		{
		}
		else if (input == 2)
		{	
		}
		else if (input == 3)
		{
		}
		else
		{
		}
	}
	return 0;
}

代码实现:

  1. 我们先实现第一个操作:在文档后插入字符串并输出,显然要用到追加拷贝函数strcat,如下:
if (input == 1)
	{
		cin >> in;
		strcat(ch, in);
		cout << ch << endl;
	}
  1. 第二步,截取文档从第 a 个字符起 b 个字符输出,只需要在数组第a+b的位置赋为\0在运用拷贝函数操作即可,代码送上 体会一下:
else if (input == 2)
		{
			int start;
			int end;
			scanf("%d %d", &start, &end);
			char in[110] = { 0 };

			ch[start + end] = '\0';
			strcat(in, &ch[start]);
			strcpy(ch, in);

			cout << ch << endl;
		}

因为在上一步操作中对in数组进行了输入,所以这里在使用in数组之前应该将in数组中的元素释放出来。

  1. 第三步,插入片段,在文档中第 a 个(有歧义,是数组下标)字符前面插入字符串,并输出文档的字符串。代码如下:
	else if (input == 3)
		{
			int cur;
			scanf("%d", &cur);
			cin >> in;
			
			strcat(in, &ch[cur]);
			ch[cur] = '\0';
			strcat(ch, in);
			printf("%s\n", ch);
	
		}

上图代码逻辑雀氏妙,大家仔细体会。

  1. 最后一步:查找子串,查找字符串 str 在文档中最先的位置并输出;如果找不到输出 -1。通过观察示例所知,若存在返回的是下标而不是内存地址(返回下标我们可以使用指针减指针的方式实现),显然这里需要用来strstr函数
else
	{
		cin >> in;
		char* ret=strstr(ch, in);
		printf("%d\n", ret != NULL ? (int)(ret-ch) : -1);
	}

这样用三目操作符 没想到吧?
【算法入门】字符串基础,算法入门,算法,c++,开发语言


下面完整代码奉上:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <iostream>

using namespace std;


char ch[110];
char in[110];


int main()
{
	int count;
	cin >> count;
	cin >> ch;
	while (count--)
	{
		int input;
		scanf("%d", &input);
		if (input == 1)
		{
			cin >> in;
			strcat(ch, in);
			cout << ch << endl;
		}
		else if (input == 2)
		{
			int start;
			int end;
			scanf("%d %d", &start, &end);
			char in[110] = { 0 };

			ch[start + end] = '\0';
			strcat(in, &ch[start]);
			strcpy(ch, in);

			cout << ch << endl;
		}
		else if (input == 3)
		{
			int cur;
			scanf("%d", &cur);
			cin >> in;
			
			strcat(in, &ch[cur]);
			ch[cur] = '\0';
			strcat(ch, in);
			printf("%s\n", ch);
	
		}
		else
		{
			cin >> in;
			char* ret = strstr(ch, in);
			printf("%d\n", ret != NULL ? (int)(ret - ch) : -1);

			/*if (NULL == ret)
				cout << -1 << endl;
			else
				cout << ret - ch << endl;*/
		}
	}
	return 0;
}

在源码中可以发现我注释了几处释放in数组的操作,其实我当时在疑惑多次对in数组输入,为什么不需要在下一次之前将in的元素释放掉。真相是 即使数组中保留着上一次输入的字符串 scanf再次输入时 会在字符串后自动补上\0保证上一次的元素无法影响输出(在不越界的情况下)

以上就是这次的全部内容。文章来源地址https://www.toymoban.com/news/detail-780876.html

感谢阅读,共同进步

到了这里,关于【算法入门】字符串基础的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言基础——数组与字符串

    数组 – 类型 – 构造类型 数组是相同类型数据的集合。 类型 [数组长度];//类型 [] char [] int [] float [] double [] 类型:4大基本类型 – char int float double 数组 指针 结构体 [] – 一定不可以省略 数组长度 – 定义变量时,告诉编译器,该数组要开辟多大空间。 类型 标识符=初始化

    2023年04月12日
    浏览(32)
  • go基础09-Go语言的字符串类型

    字符串类型是现代编程语言中最常使用的数据类型之一。在Go语言的先祖之一C语言当中,字符串类型并没有被显式定义,而是以字符串字面值常量或以’\\0’结尾的字符类型(char)数组来呈现的: 这给C程序员在使用字符串时带来一些问题,诸如: ● 类型安全性差; ● 字符

    2024年02月09日
    浏览(47)
  • 【自然语言处理】NLP入门(一):1、正则表达式与Python中的实现(1):字符串构造、字符串截取

       语言 是一种使用具有共同处理规则的沟通指令的广义概念,这些指令可以通过视觉、声音或触觉等方式传递。语言可以分为自然语言、动物语言和计算机语言。    自然语言 是人类发展过程中形成的一种信息交流方式,它包括口语和书面语,并且反映了人类的思想。

    2024年03月12日
    浏览(119)
  • 算法通关村第十二关-字符串基础题目

    思路:遍历字符串,将第i个字符和第N-i-1个字符串交换即可; 代码实现: 题目:反转字符串2 思路:每2k个一组,将其前k个字符反转,使用i+k与字符串长度n判断剩余字符串长度属于(0,k)还是 [k,2k)之间;然后按照要求剩余字符串即可; 代码实现: 题目:仅仅反转字母 思

    2024年01月22日
    浏览(38)
  • LeeCode前端算法基础100题(21) 同构字符串

    一、问题详情: 给定两个字符串  s  和  t  ,判断它们是否是同构的。 如果  s  中的字符可以按某种映射关系替换得到  t  ,那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只

    2024年01月19日
    浏览(31)
  • 【C语言基础考研向】10 字符数组初始化及传递和scanf 读取字符串

    字符数组的定义方法与前面介绍的一维数组类似.例如, 字符数组的初始化可以采用以下方式. (1)对每个字符单独赋值进行初始化.例如, (2)对整个数组进行初始化.例如, 但工作中一般不用以上两种初始化方式,因为字符数组一般用来存取字符串.通常采用的初始化方式是

    2024年01月25日
    浏览(45)
  • Python零基础入门(六)——超详细的字符串与正则表达式

    个人简介:机电专业在读研究生,CSDN内容合伙人,博主个人首页 Python入门专栏:《Python入门》欢迎阅读,一起进步!🌟🌟🌟 码字不易,如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!😊😊😊 欢迎来到本系列教程的第六篇,之前的文章已经介

    2024年02月13日
    浏览(66)
  • 【Python零基础学习入门篇③】——第三节:Python的字符串类型

    ⬇️⬇️⬇️⬇️⬇️⬇️ ⭐⭐⭐Hello,大家好呀我是陈童学哦,一个普通大一在校生,请大家多多关照呀嘿嘿😁😊😘 🌟🌟🌟 技术这条路固然很艰辛,但既已选择,该当坚毅地走下去,加油! 🌤️PUA: ” 你所看到的惊艳都曾平庸历练 **“**🚀🚀🚀 🍉🍉🍉 最后让我

    2024年02月04日
    浏览(35)
  • OpenHarmony语言基础类库【@ohos.url (URL字符串解析)】

    说明: 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 URLParams接口定义了一些处理URL查询字符串的实用方法。 constructor9+ constructor(init?: string[][] | Recordstring, string | string | URLParams) URLParams的构造函数。 系统能力:   System

    2024年04月28日
    浏览(38)
  • C 语言结构体和枚举完全指南:成员访问、字符串操作、枚举基础

    要访问结构体的成员,请使用点语法 (.): 现在您可以使用只使用一个结构体,轻松创建多个具有不同值的结构体变量: 请记住,C 语言中的字符串实际上是字符数组,不幸的是,您无法像这样为数组分配值: 会发生错误: prog.c:12:15: error: assignment to expression with array type 但是,

    2024年02月02日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包