網(wǎng)站首頁 編程語言 正文
求兩個(gè)字符串的交集,看似簡單,實(shí)則需要考慮的細(xì)節(jié)很多。
我的思路:
1.將兩個(gè)字符串簡化,將里面重復(fù)的字母減少為一個(gè)。
2.拼接兩個(gè)字符串,借助循環(huán)把重復(fù)出現(xiàn)兩次的字符找出來。
有了思路開始寫代碼。
一、main()函數(shù)
思路:
1.定義兩個(gè)儲存字符串的數(shù)組tt[M],pp[M]
2.定義指針*p接收fun2() 返回值,輸出交集
3.輸入兩個(gè)字符串(此處注意越界問題)
4.調(diào)用函數(shù)
5.輸出交集
#include <stdio.h> #include <string.h> //用到strcat(),strlen()函數(shù) #define M 50 void fun1(char tt[]); //將字符串中相同的字母去掉 char *fun2(char tt[]); //將重復(fù)的(子集)找出來 int main() { char tt[M],pp[M]; //定義兩個(gè)數(shù)組,儲存字符串 char *p; //接受fun2()返回的地址,并輸出交集字符串 int i; gets(tt); //abcdef123abc12 gets(pp); //acef123ace124 fun1(tt); //調(diào)用函數(shù) fun1(pp); //printf("%s\n",tt); //供檢驗(yàn)使用 //printf("%s\n",pp); strcat(tt,pp); //printf("%s\n",tt); p=fun2(tt); //調(diào)用函數(shù) for(i=0;*(p+i)!='\0';i++) { printf("%c",*(p+i)); //acef123 } return 0; }
二、fun1()函數(shù)
fun1()作用是將字符串中重復(fù)的字符只保留一個(gè)
思路:
1.先將重復(fù)出現(xiàn)的字符出去第一次出現(xiàn)那個(gè)都換成' '(此處為一個(gè)空格)
2.在將字符串?dāng)?shù)組元素移動,去除' '(空格)
void fun1(char tt[]) //將重復(fù)的字符抹掉 { int i,j; char ch; for(i=0;i<M;i++) { if(tt[i]!=' ') //確保確定的這一項(xiàng)不是空格 { ch=tt[i]; //確定第一次出現(xiàn)的字符 for(j=i+1;j<M;j++) //在他后方尋找 { if(ch==tt[j]) //遇到一樣的 tt[j]=' '; //用' '替換 } } } for(i=0;i<strlen(tt);i++) { if(tt[i]==' ') //找到' '位置 { for(j=i;j<strlen(tt)-1;j++) //去除' ' tt[j]=tt[j+1]; tt[j]='\0'; //此時(shí)最后一項(xiàng)與倒數(shù)第二項(xiàng)相同,用'\0'徹底抹除左后一 //項(xiàng)(目的是去除' '字符串縮短) i--; } //防止連續(xù)出現(xiàn)多個(gè)' '(假如沒有i--,此時(shí)tt[i]仍然為' //'運(yùn)行下一步為i++,這個(gè)空格就被保留下來了) } }
三、fun2()函數(shù)?
fun2()將重復(fù)出現(xiàn)的字符挑出來
思路:
1.找到相同字符,并儲存在static aa[M]中(小重點(diǎn))
2.返回第一個(gè)字符的地址
char *fun2(char tt[]) //確定子集字符串,返回字符串第一個(gè)字符的地址 { int i,j,k; char ch; static char aa[M]; //靜態(tài)變量,保證調(diào)用函數(shù)結(jié)束后數(shù)組還在 char *p; k=0; for(i=0;i<strlen(tt);i++) { ch=tt[i]; //確定第一次出現(xiàn)的字符 for(j=i+1;j<strlen(tt);j++) { if(ch==tt[j]) //如果再次出現(xiàn)一個(gè)相同的字符將他賦值給aa[M]數(shù)組 { aa[k]=ch; k++; } } } aa[k]='\0'; //最后加上'\0'一來這是個(gè)字符串,二來main()函數(shù)中作為 //for循環(huán)結(jié)束條件 p=&aa[0]; //確定第一個(gè)字符的地址 return p; //返回地址 }
注意;
這個(gè)代碼任然后缺陷,因?yàn)橛眠@個(gè)代碼求得兩個(gè)字符串的交集永遠(yuǎn)不會出現(xiàn)空格。
其他思路推薦:
先在第一個(gè)字符串中確定一個(gè)字符,在第二個(gè)字符串中查找是否存在相同字符串
這條思路特要注意字符串中字符重復(fù)出現(xiàn)帶來的影響
總結(jié)
原文鏈接:https://blog.csdn.net/qq_62416768/article/details/122279614
相關(guān)推薦
- 2023-03-15 pandas將Series轉(zhuǎn)成DataFrame的實(shí)現(xiàn)_python
- 2023-01-08 Android智能指針輕量級Light?Pointer初識_Android
- 2022-04-18 python?如何使用requests下載文件_python
- 2022-10-02 Python實(shí)現(xiàn)遍歷讀取文件或文件夾_python
- 2023-05-15 Bash中test命令的使用_linux shell
- 2024-03-20 spring-boot-maven-plugin報(bào)紅的解決辦法
- 2022-05-06 Python基于LightGBM進(jìn)行時(shí)間序列預(yù)測_python
- 2022-02-01 CSS3自定義滾動條樣式
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支