C语言字符串问题: 输入一个字符串,其中有空格,因此字符串被分为n个单词,要求输出全部单词中重复的字母

例如输入“you us”,输出“u”,没有重复的输出“no”。

#include <stdio.h>
#include <string.h>

int Div(char temp[256],char word[256][256])//划分单词
{
int n=0,i=0,j=0;
while(temp[i]!='\0')
{
if(temp[i]!=' ')
{
word[n][j++]=temp[i++];
}
else if(temp[i]==' ')//说明有一个单词
{
word[n][j]='\0';
j=0;
i++;
n++;
}
if(temp[i-1]==' '&&temp[i]==' ')//若有两个连续空格,则稍加处理一下
{
i++;
n--;
}
}
word[n][j]='\0';
return n;
}

int ZiMu(char word[256][256],int n,char ch[256])//查找不同单词中的相同字母
{
int i=0,j=0,k=0,m=0,p,q,mark;//mark是标记是否重复记录
for(i=0;i<=n;i++)
{
mark=0;
for(p=0;word[i][p]!='\0';p++)//从第一个单词分别与后面其它单词,一次类推
{
for(j=i+1;j<=n;j++)
{
for(k=0;word[j][k]!='\0';k++)
{
if(word[i][p]==word[j][k])
{
for(q=0;q<m;q++)//这个循环是为了使数组ch中字母不重复记录
{
if(word[i][p]==ch[q])
mark=1;//已经找到过该字母
}
if(mark==0)
{
ch[m++]=word[i][p];
}
}
}
}
}
}
return m;
}
void main()
{
char str[256],ch[256];
char word[256][256];
int i,m=0,n=0;
printf("请输入一个字符串:\n");
gets(str);
n=Div(str,word);
printf("共有%d个单词\n",n+1);
for(i=0;i<=n;i++)
printf("%s ",word[i]);
printf("\n");

m=ZiMu(word,n,ch);
if(m==0)
{
printf("没有重复字母!即 no!\n");
}
else
{
printf("全部单词中重复的字母如下:");
for(i=0;i<m;i++)
{
printf("%c ",ch[i]);
}
printf("\n");
}
}
/*程序已完成且VC6.0下运行成功,感觉应该完全符合你的要求,要是有什么问题,可以问我,我也是懂得一点,呵呵,你参考一下吧*/
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-12-27
做你这个题目,20分可赔大了:

#include <stdio.h>
#include <memory.h>

#define N 100
#define M 20

void main()
{
int i=0,j=0,k,l,m,count=0,countch=0;
char str[N],word[M][M],ch[M],*p;
int flag=0;

memset(str,'@',sizeof(char)*N);
memset(word,'@',sizeof(char)*M*M);
memset(ch,'@',sizeof(char)*M);

printf("请输入字符串: \n");
gets(str);

p=str;

while(*p!=NULL)
{
if(*p==' ')
{
word[i][j]='\0';
i++;
j=0;
count++;
p++;
continue;
}

word[i][j]=*p;
j++;
p++;
}

for(i=0;i<=count;i++)
{
for(j=0;word[i][j]!='@';j++)
{
flag=0;
for(k=0;k<=count;k++)
for(l=0;word[k][l]!='@';l++)
{
if(word[i][j]==word[k][l])
{
if((i!=k)&&(j!=l))
flag=1;
}
}
if(flag)
{
for(m=0;m<=countch;m++)
if(word[i][j] == ch[m]) break;

if(m>countch)
ch[countch++]=word[i][j];
}
}
}

if(countch>0)
{
printf("全部单词中重复的字母有:\n");

for(i=0;i<countch;i++)
{
printf("%c\n",ch[i]);
}
}
else printf("no\n");
}
第2个回答  2011-12-27
#include < iostream >
#include <string>
//#include <cmath>
using namespace std;
int main()
{
char str[100];
int a[26];
int i,j,t=0;
for(i=0;i<26;i++)
{
a[i] = 0;
}
cin.getline(str,100,'\n');
for(i=0;str[i]!='\0';i++)
{
if('a'<=str[i]&&str[i]<='z')
{
j=str[i]-'a';
a[j]+=1;
}
}

for(i=0;i<26;i++)
{
if(a[i]>1)
{
cout<<char(i+'a');
t++;
}
}
if(0==t)
{
cout<<"NO"<<endl;
}

return 0;
}
//没写注解,有什么问题可以找我讨论的,百度hi我就行了
相似回答