c語言求兩個(gè)字符串的交集
求兩個(gè)字符串的交集,看似簡(jiǎn)單,實(shí)則需要考慮的細(xì)節(jié)很多。
我的思路:
1.將兩個(gè)字符串簡(jiǎn)化,將里面重復(fù)的字母減少為一個(gè)。
2.拼接兩個(gè)字符串,借助循環(huán)把重復(fù)出現(xiàn)兩次的字符找出來。
有了思路開始寫代碼。
一、main()函數(shù)
思路:
1.定義兩個(gè)儲(chǔ)存字符串的數(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ù)組,儲(chǔ)存字符串
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ù)組元素移動(dòng),去除' '(空格)
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.找到相同字符,并儲(chǔ)存在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)不會(huì)出現(xiàn)空格。
其他思路推薦:
先在第一個(gè)字符串中確定一個(gè)字符,在第二個(gè)字符串中查找是否存在相同字符串
這條思路特要注意字符串中字符重復(fù)出現(xiàn)帶來的影響
總結(jié)
到此這篇關(guān)于c語言求兩個(gè)字符串的交集的文章就介紹到這了,更多相關(guān)c語言字符串交集內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言常用標(biāo)準(zhǔn)頭文件使用實(shí)例
在C的系列語言程序中,頭文件(通常擴(kuò)展名為.h)被大量使用,它通常包含函數(shù)、變量、結(jié)構(gòu)體等的聲明和定義,以及一些宏定義和類型定義,這篇文章主要給大家介紹了關(guān)于C語言常用標(biāo)準(zhǔn)頭文件使用的相關(guān)資料,需要的朋友可以參考下2024-08-08
詳解dll動(dòng)態(tài)庫的開發(fā)與調(diào)用及文件的讀寫小程序
這篇文章主要介紹了詳解dll動(dòng)態(tài)庫的開發(fā)與調(diào)用及文件的讀寫小程序的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下2017-09-09
C語言數(shù)據(jù)結(jié)構(gòu)之順序數(shù)組的實(shí)現(xiàn)
這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)之順序數(shù)組的實(shí)現(xiàn)的相關(guān)資料,這里提供實(shí)現(xiàn)實(shí)例,希望通過本文能幫助到大家,需要的朋友可以參考下2017-08-08
c語言讀取txt文件內(nèi)容簡(jiǎn)單實(shí)例
在本篇文章里小編給大家整理的是關(guān)于c語言如何讀取txt文件內(nèi)容,需要的朋友們可以參考下。2020-03-03

