作者在 2011-04-17 13:32:16 发布以下内容
从网上看到一个C语言问题,就是编函数求两个字符串的交集和并集,自己试着写了一个,在这里晾晾:
#include<stdio.h>
#include<string.h>
#define size 50
void Intersection(char* dest,char* str1,char* str2)//dest是目标串,用以放后两个串元素的交集
{
int i,j,k,m=0,flag=0;
int len1=strlen(str1),len2=strlen(str2);
for(i=0;i<len1;i++)
{
for(j=0;j<len2;j++)
{
if(str2[j]==str1[i]) //如果str2中有str1的元素,置flag为 1
{
flag=1;
break;
}
}
for(k=0;k<strlen(dest);k++)
if(str1[i]==dest[k]) //如果该元素已在dest中出现,置flag为 0
{
flag=0;
break;
}
if(flag) //如果flag为1,把该元素放在目标串中
{
dest[m++]=str1[i];
str2[j]=str2[--len2];//为了减少循环次数,可以把str2中的末一个元素放在str2[j]中,并把len2自减1,此步不必要
}
flag=0;
}
}
int main()//测试一下
{
char str1[size],str2[size],dest[size]="";
puts("请输入两个字符串:");
gets(str1);
gets(str2);
Intersection(dest,str1,str2);
puts("两个串中元素的交集是:");
puts(dest);
return 0;
}
#include<string.h>
#define size 50
void Intersection(char* dest,char* str1,char* str2)//dest是目标串,用以放后两个串元素的交集
{
int i,j,k,m=0,flag=0;
int len1=strlen(str1),len2=strlen(str2);
for(i=0;i<len1;i++)
{
for(j=0;j<len2;j++)
{
if(str2[j]==str1[i]) //如果str2中有str1的元素,置flag为 1
{
flag=1;
break;
}
}
for(k=0;k<strlen(dest);k++)
if(str1[i]==dest[k]) //如果该元素已在dest中出现,置flag为 0
{
flag=0;
break;
}
if(flag) //如果flag为1,把该元素放在目标串中
{
dest[m++]=str1[i];
str2[j]=str2[--len2];//为了减少循环次数,可以把str2中的末一个元素放在str2[j]中,并把len2自减1,此步不必要
}
flag=0;
}
}
int main()//测试一下
{
char str1[size],str2[size],dest[size]="";
puts("请输入两个字符串:");
gets(str1);
gets(str2);
Intersection(dest,str1,str2);
puts("两个串中元素的交集是:");
puts(dest);
return 0;
}
有一个问题要说一下,如果上述主函数中我们把第一个语句改成:
char str1[size],str2[size],dest[size];
即没有初始化dest字符串,最后会输出什么样的结果,为什么?(find and think and resolve)