C語言(CED)多組字符串匹配,輸出所有重復出現的字符串,多次重復出現的只輸出一次就好。

最近遇到一道題目:多組字符串匹配,輸出所有重復出現的字符串,多次重復出現的只輸出一次就好。

舉個例子:

input:qwer

? ? ? ? ? ?qwer

? ? ? ? ? ?sdfgh

output:qwer

題意大致就是這樣,下面給出我的最終解答,因為不是OJ所以可能還會有些許錯誤!若有,還望各位指正!

一、解題思路

1、main()函數里:

因為涉及到多組字符串匹配,為了方便起見我是用二維數組(開的足夠大,而且是有兩個,一個用來存儲初次輸入的字符串,另一個用來保存要輸出的結果,以便統一輸出),存儲字符串并進行比較(你可以嘗試一下動態分配內存空間malloc一下)。我先輸入一個數字,用來明確將要有多少串字符串進行匹配。接下來根據之前輸入的數字,進行字符串的輸入,輸入完成后,就會跳進字符串匹配函數match()中。

2、match()字符串匹配函數

這部分函數寫的很復雜->空間復雜度高,循環套循環,循環套循環,因為不是OJ所以這么任性!這個函數大體上實現兩個功能1:匹配字符串,將重復出現的字符串有條件的放到str1[1000][1000]數組中

2:對已重復出現的字符串進行查重,即“1”中的存儲條件,以達到單一輸出的目的!

match()內部使用的函數是函數庫中提供的strcmp()函數和strcpy()函數。值得注意的是,在將已查到的重復的字符串放入str1[1000][1000]數組(輸出結果聚集數組)中時,有一個Flag標記,用來標明這個將要存儲的字符串是否已在str1[1000][1000]數組存在。

二、實現過程

下面的程序將main()和match()函數分離,代碼的注釋應該是很清楚了,所以在這里就不多說了!程序中涉及到二維數組傳參問題等可以參考我的其他博文!(strcmp()可以比較二維數組,但是是要按行來比較

#include<stdio.h>
#include<string.h>
char str[1000][1000]; //定義一個能存1000個字符串的大小為1000個字符的char型數組
char str1[1000][1000];//把所有找到的不重復的結果存儲找到STR1中
int k=0;//str1中的字符串數量
void match(int n,char (*str)[1000])
{int i,p;//定義內外循環變量int j=0;//循環控制變量,判斷找到的在str中重復出現的字符串之前是否存到了str1中。for(i=0; i<n-1; i++){for(p=i+1; p<n; p++){if(strcmp(str[i],str[p])==0)//說明str字符串組中有重復出現的字符串{if(k==0)//表示str1中還沒有字符串,所以可以直接復制過去{strcpy(str[p],str1[k]);k++;}else{int flag=0;//用于確定str中重復出現的字符串是否在str1中出現for(j=0;j<k;j++)//用循環對已找出的str1中進行查重{if(strcmp(str[p],str1[j])==0)//如果有重復,則改變標記flag{flag=1;break;}elsecontinue;}//跳出循環后,對flag進行判斷,如果為0說明可以將之前的結果放入str1中,若為1,則說明結果重復,進行下一次的str字符串組的搜尋if(flag==0){strcpy(str[p],str1[k]);k++;}elsecontinue;}}}}
}
int main()
{printf("請輸入要比對的字符串數量:\n");int n;//字符串數量scanf("%d",&n);//輸入字符串的數量printf("請輸入所有要比對的字符串:\n");for(int i=0; i<n; i++) //循環,從而輸入所有要匹配的字符串。scanf("%s",&str[i]);match(n,str);//調用匹配函數int i=0;if(k!=0)//說明有結果可以輸出{printf("所有重復出現的字符串為:\n");for(i=0;i<k;i++)printf("%s\n",str[i]);}elseprintf("抱歉!沒有相同的字符串\n");return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/531105.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/531105.shtml
英文地址,請注明出處:http://en.pswp.cn/news/531105.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

編譯原理:文法及其二義性(判定及消除)

&#xff08;請先看置頂博文&#xff09;本博打開方式&#xff0c;請詳讀_liO_Oil的博客-CSDN博客_怎么把androidstudio卸載干凈 學編譯原理時&#xff0c;會學到文法&#xff0c;老師在介紹完文法的相關定義后又介紹了文法的二義性&#xff0c;但是沒說到底是如何避免文法的二…

C語言(CED)與long long相關的知識

在寫代碼時&#xff0c;有時int、double定義的變量的范圍遠遠小于題目要求的范圍&#xff0c;那么現在就是使用long long的時候 1、 long long 是C99標準對整型類型做的一個擴展&#xff0c;每個long long類型的變量可以占8字節&#xff0c;每個字節8位&#xff0c;一共64位。…

C語言(CED)對于一個2行N列的走道。現在用1*2,2*2的磚去鋪滿。問有多少種不同的方式(遞歸求解)

又涉及到遞歸問題&#xff0c;這道題的大致內容是這樣的&#xff1a; &#xff08;請用遞推方式求解&#xff09;對于一個2行N列的走道。現在用1*2,2*2的磚去鋪滿。問有多少種不同的方式。下圖是一個2行17列的走道的某種鋪法。 提示&#xff1a;觀察前n個結果&#xff0c;可以…

C語言(CED)王老師爬樓梯,他可以每次走1級或者2級,輸入樓梯的級數,求不同的走法數(遞歸求解)

&#xff08;請先看置頂博文&#xff09;本博打開方式&#xff0c;請詳讀_liO_Oil的博客-CSDN博客_怎么把androidstudio卸載干凈 題目大意&#xff1a;王老師爬樓梯&#xff0c;他可以每次走1級或者2級&#xff0c;輸入樓梯的級數&#xff0c;求不同的走法數。例如&#xff1a;…

C語言(CED)查找最接近的元素(分治法/二分查找):在一個非降序列中,查找與給定值最接近的元素。(遞歸實現)

&#xff08;請先看置頂博文&#xff09;本博打開方式&#xff0c;請詳讀_liO_Oil的博客-CSDN博客_怎么把androidstudio卸載干凈 一、題目大意 查找最接近的元素&#xff08;分治法/二分查找&#xff09;&#xff1a;在一個非降序列中&#xff0c;查找與給定值最接近的元素。…

C語言(CED)輸出前k大的數(分治法/局部快速排序):給定一個數組,統計前k大的數并且把這k個數從大到小輸出。

)輸出前k大的數&#xff08;分治法/局部快速排序&#xff09;:給定一個數組&#xff0c;統計前k大的數并且把這k個數從大到小輸出。 [輸入] 第一行包含一個整數n&#xff0c;表示數組的大小。 第二行包含n個整數&#xff0c;表示數組的元素&#xff0c;整數之間以一個空格分…

C語言(CED)最長公共子序列----動態規劃第一題

一、動態規劃算法與分治法的異同 相同點&#xff1a; A、二者均是將待求解的問題分成若干子問題來求解。 B、二者在編寫代碼的時候&#xff0c;都要用到遞歸。 不同點&#xff1a; A、分治法求解的問題&#xff0c;在將問題分成若干子問題之后&#xff0c;其子問…

C語言(CED)01背包——動態規劃第二題

一、問題描述 給定n種物品和一個背包。物品i的質量Wi&#xff0c;其價值Vi&#xff0c;背包的容量為c。問如何選擇裝入背包中的物品&#xff0c;使得裝入背包中的物品總價值最大&#xff1f; 二、解題思想 01背包和最長公共子序列都是動態規劃題目中求最優解的問題&#xff0…

C語言(CED)gameboy接餡餅問題

一、題目大意 都說天上不會掉餡餅&#xff0c;但有一天gameboy正走在回家的小徑上&#xff0c;忽然天上掉下大把大把的餡餅。這餡餅別處都不掉&#xff0c;就掉落在他身旁的10米范圍內。餡餅如果掉在了地上當然就不能吃了&#xff0c;所以gameboy馬上卸下身上的背包去接。但由…

C語言(CED)遞歸實現漢諾塔問題

一、問題大意 大梵天創造世界的時候做了三根金剛石柱子&#xff0c;在一根柱子上從下往上按照大小順序摞著64片黃金圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。并且規定&#xff0c;任何時候&#xff0c;在小圓盤上都不能放大圓盤&#xff0c;…

C語言(CED)智力大沖浪——貪心算法第一題

一、題目大意 小偉報名參加中央電視臺的智力大沖浪節目&#xff0c;本次挑戰賽吸引了眾多參賽者&#xff0c;主持人為了表彰大家的勇氣&#xff0c;先獎勵每個參賽者m元。先不要太高興&#xff01;因為這些錢還不一定都是你的&#xff01;接下來主持人宣布了比賽規則&#xff…

C語言(CED)鋼條最優切割收益

目錄 一、題目大意 二、大致思路 三、具體實現 一、題目大意 一家公司購買長鋼條&#xff0c;將其切割成短鋼條出售&#xff0c;切割本身沒有成本&#xff0c;長度為i的短鋼條的價格為Pi。那給定一段長度為n的鋼條和一個價格表Pi,求鋼條的切割方案使得收益Rn最大。提示&…

C語言(CED)如何用sort函數根據結構體里的某一屬性進行排序

&#xff08;請先看置頂博文&#xff09;本博打開方式&#xff0c;請詳讀_liO_Oil的博客-CSDN博客_怎么把androidstudio卸載干凈 前幾天在編寫代碼的時候&#xff0c;突然要根據結構體的屬性進行從小到大的排序&#xff0c;這即是我寫這篇文章的導火索。 正如大家所知…

撰寫paper時,如何在word里輸入圖片或其他文獻(PDF)里的公式?(更新時間2022.03.01)

我們在寫paper時&#xff0c;經常會遇到在Word里編寫數學公式的問題&#xff0c;其中大多數公式是已經存在的&#xff0c;所以只需要識別、復制、粘貼即可&#xff0c;那么接下來&#xff0c;我就介紹一下“Mathtype”“Mathpix”的方法&#xff0c;分為所需軟件、軟件操作、公…

家里接入某運營商300M寬帶,為何網速還是很慢?(還未裝修房屋的請進來)

&#xff08;請先看置頂博文&#xff09;本博打開方式&#xff0c;請詳讀_liO_Oil的博客-CSDN博客_怎么把androidstudio卸載干凈 引言&#xff1a;家里接入300M的寬帶&#xff0c;但是自我感覺網速不佳&#xff0c;遂結合所學知識&#xff0c;對此問題進行分析、研究和調察&…

(CED)列指針與行指針的聯系與區別

一、列指針&#xff08;豎為列&#xff09; 1、列指針相關定義 列指針&#xff1a;被稱為是指針變量指向二維數組的某個元素 一般使用時會有如下定義&#xff1a; int a[3][4]{1,2,3,4,5,6,7,8,9,10,11,12}; int *p;而上述代碼定義的指針p&#xff0c;一般按照下表方式指向…

C語言(CED)C語言中雙引號和單引號的區別

最簡單的區別&#xff1a; 在字符型變量賦初值時&#xff0c;用單引號&#xff1b;為字符串變量賦初值時用雙引號&#xff01; 具體區別&#xff1a; 1、大小 單引號引起的一個字符&#xff0c;其大小為1個Byte。 雙引號引起的字符串&#xff0c;因為在其結尾需加一個二進…

一、Pytho第一課——Python安裝及配置路徑方法(最詳細小白教程,沒有之一。如若不懂,不是還可以私信嘛!對吧?)

目錄 一、下載軟件 二、安裝 三、編輯器 四、在Pycharm上成功運行Python程序&#xff08;配置Python解釋器&#xff09; 一、下載軟件 官方下載地址&#xff1a;https://www.python.org/downloads/&#xff08;打開似乎很吃力&#xff0c;必要時刻“掛燈”&#xff09; …

二、Python第二課——變量命名規則及字符串變量相關函數

目錄 一、變量命名規則 二、字符串變量及相關函數 1、字符串變量 2、相關函數 最后瑣碎雜物&#xff1a; 1、字符串之間的拼接 2、字符串格式控制&#xff08;制表符和換行&#xff09; 一、變量命名規則 正如其他編程語言一樣&#xff0c;程序離不開聲明變量&#x…

三、Python第三課——Python中數字的用法及編碼原則(Python禪意)

目錄 一、Python中的數字 1、整數 2、浮點數 3、整數、浮點數和字符串的聯系和區別 二、編碼原則 1、為代碼增加注釋 2、Python 禪意 A、編碼精美 B、避繁就簡 C、無簡就繁 D、使用常規方法解決問題 E、先有效、再精巧、逐步升華 一、Python中的數字 編程中&#…