数据结构(C语言):两个字符串比较大小

这篇具有很好参考价值的文章主要介绍了数据结构(C语言):两个字符串比较大小。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、一个小插曲

在写这篇文章之前,作者想先和大家分享一个小故事。如果你不想看这个小故事的话,可以直接跳到第二点哦。

为了锻炼自己的编码能力,平时作业和实验题的代码我都是不看书、不看老师的PPT,按照自己的思路一行一行敲出来的。同时也不太理解那些照着书敲代码的同学。直到有一天,我看见我的数据结构作业字符串大小比较的函数被打上了一把大大的红叉,我一开始很不理解:我的代码在编译器上成功运行了,没问题呀!一定是老师改错了。

我当初写的代码是这样的,思路是:先比较串长,字符串越长越大。若串长一致,再依次比较各个字符的ASCII码,ASCII码大的串越大。所以写出来的函数是这样的。

Status StringCompare1(String* S, String* T)//返回值为1,表示S>T;返回值为0,代表S=T;返回值为-1,代表S<T
{
	if (S->len > T->len)//串长S>T
		return 1;
	else if (S->len < T->len)//串长S<T
		return -1;
	else//若串长一致,则分别比较相应字符的ASCII
	{
		for (int i = 0; i < S->len; i++)
		{
			if (S->data[i] > T->data[i])
				return 1;
			else if (S->data[i] < T->data[i])
				return -1;
		}
		return 0;//若循环跳出,则说明两个字符串完全相同
	}
}

又过了好几个星期(也就是今天),我打算写一篇字符串大小比较的函数,因为是要发出来给大家看的,所以我必须保证内容的正确性,于是我在CSDN上搜了几篇关于字符串大小比较的博客,才发现我当初是错得多么离谱。

也是近段时间才明白:不能太忽视书本和教学PPT,要先熟悉掌握经典的算法思路,再去自己敲代码,否则,完全凭自己的思路,算法往往不是最优的,甚至有可能是错的。像这样的坑,其实我已经跳了不止一次,今天分享的这个故事只是其中的一个。以后要好好改进这点了,先把基础打牢,再去“发明创造”。

二、算法思路及代码

字符串的大小是从最左边第一个字符开始比较,大者为大,小者为小,若相等,则继续比较后面的字符。

话不多说上代码:

首先是头文件、宏定义及结构体等

#include<stdio.h>
#include<stdlib.h>
typedef int Status;
#define ERROR 0
#define OK 1
#define MAX_SIZE 21//多留出一位储存'\n'

typedef struct String {
	char* data;
	int len;
};

其次是串的大小比较函数

Status StringCompare(String* S, String* T)//返回值为1,表示S>T;返回值为0,代表S=T;返回值为-1,代表S<T
{
	for (int i = 0; S->data[i] && T->data[i]; i++)
	{
		if (S->data[i] > T->data[i])//分别比较对应字符的ASCII
			return 1;
		else if(S->data[i] < T->data[i])//分别比较对应字符的ASCII
			return -1;
	}
	return 0;//若循环跳出,说明两个字符串大小相等
}

为了测试函数的正确性,我们需要再定义串的初始化函数、输入函数以及主函数。

串的初始化函数

void InitString(String* s)//初始化
{
	s->data = (char*)malloc(sizeof(char)*MAX_SIZE);
	s->len = 0;
}

串的输入函数

Status Input(String* s)//添加元素
{
	int n;
	printf("输入需要加入的元素个数:");
	scanf("%d", &n);//输入需要加入的元素个数
	getchar();//吸收上一次输入的'\n'
	printf("输入字符串:");
	for (int i = s->len; i <= n; i++)//i<=n因为最后还要输入'\n'代表输入完成
	{
		s->data[i] = getchar();
		s->len++;
		if (s->len == MAX_SIZE-1)//每一次输入后,判断串是否已满(因为结尾有'\n',所以MAX_SIZE-1就认为数组已满)
			return ERROR;
	}
	s->len--;//除去结尾的'\n'
	return OK;
}

主函数

int main()
{
	String* S = (String*)malloc(sizeof(String));
	InitString(S);//初始化
	Input(S);
	String* T = (String*)malloc(sizeof(String));
	InitString(T);//初始化
	Input(T);
	if (StringCompare(S, T) == 1)
		printf("S>T");
	else if (StringCompare(S, T) == 0)
		printf("S=T");
	else
		printf("S<T");
	return 0;
}

所有代码放一起运行,就能得到最终的运行结果了,这里放一个运行示例,其他的你们自己去试吧。

运行结果

c语言比较两个字符串大小并按顺序输出,数据结构,c语言,开发语言,算法

 文章来源地址https://www.toymoban.com/news/detail-770452.html

到了这里,关于数据结构(C语言):两个字符串比较大小的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【数据结构】数组和字符串(十四):字符串匹配1:朴素的模式匹配算法(StringMatching)

      字符串(String)是由零个或多个字符(char)顺序排列组成的有限序列,简称为串。例如 “good morning”就是由12个字符构成的一个字符串。一般把字符串记作: S = ′ ′ a 0 a 1 … a n − 1 ′ ′ S=\\\'\\\'a_{0} a_{1}…a_{n-1}\\\'\\\' S = ′′ a 0 ​ a 1 ​ … a n − 1 ′′ ​   其中S是串名,引号中

    2024年02月05日
    浏览(73)
  • 一个退役中校教你如何用go语言写一个基于B+树的json数据库(进阶篇)之json字符串解析为BsTr结构(一)

    1.对象式json字符串 s := \\\"{\\\"put\\\":{\\\"putjsontest\\\":{\\\"aaa\\\":\\\"sdftsdfs\\\\dfe29asdf\\\",\\\"aaab\\\":true,\\\"arrarrstrct\\\":{\\\"nnn\\\":-1234567890,\\\"ccc\\\":[[\\\"sdftsdfs\\\\dfe29asdf\\\",\\\"nmbndfvdfgfdg\\\"],[\\\"sdftsdfs\\\\dfe29asdf\\\",\\\"poiuiyyttt\\\"]]},\\\"ddd\\\":\\\"sdftsdfs\\\\dfe29asdf\\\",\\\"fff\\\":false,\\\"comboolarr\\\":[{\\\"boolarr0\\\":[true,false]},{\\\"boolarr1\\\":[true,false]}]}

    2024年02月21日
    浏览(52)
  • Redis数据结构与对象-字符串对象SDS

    Redis没有使用C的字符串,而是自己构建了简单动态字符串(Simple Dynamic String),简称SDS。通过这种字符串格式能够对redis字符串操作进行提速。下面介绍原理。 sds数据格式如下: 比如,一个sds 中存的是 “Redis” ,那么buf 中是一个char型的数组,存5个字符R, e,d,i,s len =5;free

    2023年04月16日
    浏览(47)
  • 数据结构与算法之字符串: Leetcode 557. 反转字符串中的单词 III (Typescript版)

    翻转字符串中的单词 III https://leetcode.cn/problems/reverse-words-in-a-string-iii/ 描述 给定一个字符串 s ,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。 示例 1: 示例 2: 提示: 1 = s.length = 5 * 1 0 4 10^4 1 0 4 s 包含可打印的 ASCII 字符。 s 不包含任何开头或

    2024年02月01日
    浏览(76)
  • MATLAB 之 常用内部函数,运算,字符串和结构数据与单元数据

    内部函数是由 MATLAB 系统根据一般用户的需要编制并提供给用户使用的一组程序,也被称为系统函数或库函数。 MATLAB 提供了许多数学函数,函数的自变量规定为矩阵变量,运算法则是将函数逐项作用于矩阵的元素上,因而运算的结果是一个与自变量具有相同维数和大小的矩阵

    2024年02月04日
    浏览(51)
  • 【零基础学Rust | 基础系列 | 数据结构】元组,数组,向量,字符串,结构体

    在Rust编程语言中,数据结构是组织和存储数据的一种方式,它们使得数据可以高效地被访问和操作。本章将详细介绍元组,数组,向量,字符串,和结构体这几种基本的数据结构。 元组是Rust编程语言中的一种复合数据类型,它可以包含多个值,这些值可以是不同类型。元组

    2024年02月11日
    浏览(60)
  • 数据结构(Java实现)-字符串常量池与通配符

    字符串常量池 在Java程序中,类似于:1, 2, 3,3.14,“hello”等字面类型的常量经常频繁使用,为了使程序的运行速度更快、更节省内存,Java为8种基本数据类型和String类都提供了常量池。 “池” 是编程中的一种常见的, 重要的提升效率的方式, 我们会在未来的学习中遇到各

    2024年02月10日
    浏览(50)
  • 数据结构课设:基于字符串模式匹配算法的病毒感染检测问题

    1.掌握字符串的顺序存储表示方法。 2.掌握字符串模式匹配算法BF算法或KMP算法的实现。 问题描述 医学研究者最近发现了某些新病毒,通过对这些病毒的分析,得知它们的DNA序列都是环状的。现在研究者已收集了大量的病毒DNA和人的DNA数据,想快速检测出这些人是否感染了

    2023年04月27日
    浏览(50)
  • 【JavaScript数据结构与算法】字符串类(计算二进制子串)

    个人简介 👀 个人主页: 前端杂货铺 🙋‍♂️ 学习方向: 主攻前端方向,也会涉及到服务端(Node.js) 📃 个人状态: 在校大学生一枚,已拿多个前端 offer(秋招) 🚀 未来打算: 为中国的工业软件事业效力 n 年 🥇 推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2/3项目

    2024年02月05日
    浏览(46)
  • 【字典树/trie树】实现高效插入和查询字符串的数据结构

    本文是https://www.acwing.com/problem/content/description/837/的总结,有兴趣可以做做 字典树的实现依赖于树结构,有两种操作,1是插入字符串,2是查找字符串。使用idx维护最新的结点下标。如下图,假设我们维护一个   可以看到,我们维护了一个树形结构储存了左边的字符串,但是

    2024年02月03日
    浏览(52)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包