日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言(CED)多组字符串匹配,输出所有重复出现的字符串,多次重复出现的只输出一次就好。

發布時間:2025/3/8 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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; }

?

總結

以上是生活随笔為你收集整理的C语言(CED)多组字符串匹配,输出所有重复出现的字符串,多次重复出现的只输出一次就好。的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。