国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

數據結構(C語言):兩個字符串比較大小

這篇具有很好參考價值的文章主要介紹了數據結構(C語言):兩個字符串比較大小。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、一個小插曲

在寫這篇文章之前,作者想先和大家分享一個小故事。如果你不想看這個小故事的話,可以直接跳到第二點哦。

為了鍛煉自己的編碼能力,平時作業(yè)和實驗題的代碼我都是不看書、不看老師的PPT,按照自己的思路一行一行敲出來的。同時也不太理解那些照著書敲代碼的同學。直到有一天,我看見我的數據結構作業(yè)字符串大小比較的函數被打上了一把大大的紅叉,我一開始很不理解:我的代碼在編譯器上成功運行了,沒問題呀!一定是老師改錯了。

我當初寫的代碼是這樣的,思路是:先比較串長,字符串越長越大。若串長一致,再依次比較各個字符的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;//若循環(huán)跳出,則說明兩個字符串完全相同
	}
}

又過了好幾個星期(也就是今天),我打算寫一篇字符串大小比較的函數,因為是要發(fā)出來給大家看的,所以我必須保證內容的正確性,于是我在CSDN上搜了幾篇關于字符串大小比較的博客,才發(fā)現我當初是錯得多么離譜。

也是近段時間才明白:不能太忽視書本和教學PPT,要先熟悉掌握經典的算法思路,再去自己敲代碼,否則,完全憑自己的思路,算法往往不是最優(yōu)的,甚至有可能是錯的。像這樣的坑,其實我已經跳了不止一次,今天分享的這個故事只是其中的一個。以后要好好改進這點了,先把基礎打牢,再去“發(fā)明創(chuàng)造”。

二、算法思路及代碼

字符串的大小是從最左邊第一個字符開始比較,大者為大,小者為小,若相等,則繼續(xù)比較后面的字符。

話不多說上代碼:

首先是頭文件、宏定義及結構體等

#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;//若循環(huán)跳出,說明兩個字符串大小相等
}

為了測試函數的正確性,我們需要再定義串的初始化函數、輸入函數以及主函數。

串的初始化函數

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語言,開發(fā)語言,算法

?文章來源地址http://www.zghlxwxcb.cn/news/detail-770452.html

到了這里,關于數據結構(C語言):兩個字符串比較大小的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【數據結構】數組和字符串(十四):字符串匹配1:樸素的模式匹配算法(StringMatching)

    【數據結構】數組和字符串(十四):字符串匹配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日
    瀏覽(42)
  • 一個退役中校教你如何用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日
    瀏覽(19)
  • Redis數據結構與對象-字符串對象SDS

    Redis沒有使用C的字符串,而是自己構建了簡單動態(tài)字符串(Simple Dynamic String),簡稱SDS。通過這種字符串格式能夠對redis字符串操作進行提速。下面介紹原理。 sds數據格式如下: 比如,一個sds 中存的是 “Redis” ,那么buf 中是一個char型的數組,存5個字符R, e,d,i,s len =5;free

    2023年04月16日
    瀏覽(28)
  • 數據結構與算法之字符串: 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日
    瀏覽(23)
  • MATLAB 之 常用內部函數,運算,字符串和結構數據與單元數據

    MATLAB 之 常用內部函數,運算,字符串和結構數據與單元數據

    內部函數是由 MATLAB 系統(tǒng)根據一般用戶的需要編制并提供給用戶使用的一組程序,也被稱為系統(tǒng)函數或庫函數。 MATLAB 提供了許多數學函數,函數的自變量規(guī)定為矩陣變量,運算法則是將函數逐項作用于矩陣的元素上,因而運算的結果是一個與自變量具有相同維數和大小的矩陣

    2024年02月04日
    瀏覽(24)
  • 【零基礎學Rust | 基礎系列 | 數據結構】元組,數組,向量,字符串,結構體

    【零基礎學Rust | 基礎系列 | 數據結構】元組,數組,向量,字符串,結構體

    在Rust編程語言中,數據結構是組織和存儲數據的一種方式,它們使得數據可以高效地被訪問和操作。本章將詳細介紹元組,數組,向量,字符串,和結構體這幾種基本的數據結構。 元組是Rust編程語言中的一種復合數據類型,它可以包含多個值,這些值可以是不同類型。元組

    2024年02月11日
    瀏覽(31)
  • 數據結構(Java實現)-字符串常量池與通配符

    數據結構(Java實現)-字符串常量池與通配符

    字符串常量池 在Java程序中,類似于:1, 2, 3,3.14,“hello”等字面類型的常量經常頻繁使用,為了使程序的運行速度更快、更節(jié)省內存,Java為8種基本數據類型和String類都提供了常量池。 “池” 是編程中的一種常見的, 重要的提升效率的方式, 我們會在未來的學習中遇到各

    2024年02月10日
    瀏覽(23)
  • 數據結構課設:基于字符串模式匹配算法的病毒感染檢測問題

    數據結構課設:基于字符串模式匹配算法的病毒感染檢測問題

    1.掌握字符串的順序存儲表示方法。 2.掌握字符串模式匹配算法BF算法或KMP算法的實現。 問題描述 醫(yī)學研究者最近發(fā)現了某些新病毒,通過對這些病毒的分析,得知它們的DNA序列都是環(huán)狀的?,F在研究者已收集了大量的病毒DNA和人的DNA數據,想快速檢測出這些人是否感染了

    2023年04月27日
    瀏覽(28)
  • 【字典樹/trie樹】實現高效插入和查詢字符串的數據結構

    【字典樹/trie樹】實現高效插入和查詢字符串的數據結構

    本文是https://www.acwing.com/problem/content/description/837/的總結,有興趣可以做做 字典樹的實現依賴于樹結構,有兩種操作,1是插入字符串,2是查找字符串。使用idx維護最新的結點下標。如下圖,假設我們維護一個 ? 可以看到,我們維護了一個樹形結構儲存了左邊的字符串,但是

    2024年02月03日
    瀏覽(28)
  • 【JavaScript數據結構與算法】字符串類(計算二進制子串)

    【JavaScript數據結構與算法】字符串類(計算二進制子串)

    個人簡介 ?? 個人主頁: 前端雜貨鋪 ???♂? 學習方向: 主攻前端方向,也會涉及到服務端(Node.js) ?? 個人狀態(tài): 在校大學生一枚,已拿多個前端 offer(秋招) ?? 未來打算: 為中國的工業(yè)軟件事業(yè)效力 n 年 ?? 推薦學習:??前端面試寶典 ??Vue2 ??Vue3 ??Vue2/3項目

    2024年02月05日
    瀏覽(102)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包