C语言的编程问题(指针) 请各位大虾帮助小弟完成

meng4057322 2009-06-13 12:02:29
输入两串字符(假定不输入大写字母),每串以“&”结束,输出在两个串中都出现过的字母
用指针一维数组做
...全文
69 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
就呆在云上 2009-06-14
  • 打赏
  • 举报
回复

先排序
再比较吧
Walf_ghoul 2009-06-14
  • 打赏
  • 举报
回复
补上代码:

#include <stdio.h>
#include <stdlib.h>

#define MAX 100 //设定输入字符串的字符的最大数

int main()
{
char m[MAX]={}; //接收字符数组
char n[MAX]={};

int asc[255]={0};
int i;
printf("请输入两个字符串且都以'&'结尾\n");

gets(m); //获得字符串
gets(n);


//遍历第一个字符串将出现的字符相应的值设为1
for(i = 0;i < MAX;i++)
{
if(m[i] != '&')
{
asc[(int)m[i]] = 1;
}
else
{
break;
}
}


//遍历第二个字符串,将对应值为一的设为二
for(i = 0 ;i< MAX;i++)
{
if(n[i] != '&')
{
if( asc[(int)n[i]] == 1 )
asc[(int)n[i]] = 2;
}
else
{
break;
}
}

//输出同时出现的字符
for(i = 0 ; i< 255;i++)
{
if(asc[i] == 2)
{
printf("%c ",i);
}

}
return 0;
}


结果:
输入:check123%/+&
hello34+&
输出:+ 3 e h
rabbitjerry 2009-06-13
  • 打赏
  • 举报
回复
冒泡
ltc_mouse 2009-06-13
  • 打赏
  • 举报
回复
可以考虑用数组保存出现过的字符(推荐位图法),指针用来遍历,一次遍历就可以得到结果了~
mengde007 2009-06-13
  • 打赏
  • 举报
回复
冒泡即可;
yang_e_2009 2009-06-13
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;

char Arr[] = "jhagmcj&oskcakhbfcja";
int main()
{
for(char Ob = 'a'; Ob != '{'; ++Ob)
{
for(char* iter = Arr; *iter != '&'; ++iter)
if(*iter == Ob)
for(char* iter2 = Arr+sizeof(Arr)-1; *iter2 != '&'; --iter2)
if(*iter2 == Ob)
{
cout << Ob << " ";
goto A;
}
A: ;
}
system("PAUSE");
return 0;
} //输出 a c h j

这样?
hofstede 2009-06-13
  • 打赏
  • 举报
回复
大家不都帮你解决了嘛
Walf_ghoul 2009-06-13
  • 打赏
  • 举报
回复
个人认为使用字符的ASCII码值建立数组比较简单,将其所有元素初始化为0,遍历其中一个字符串时,对于字符串出现的字符,将对应的的数组的值设为1,遍历第二个时,若对应的的数组的值为1,则将其设为2,最后输出值为2的对应的字符。
hjjdebug 2009-06-13
  • 打赏
  • 举报
回复
题目很简单啦,总共才26个字母。
是否包含全键盘字符,例如字母,数字,符号,大小写。 不过大不了把128个位图全包括了。
  • 打赏
  • 举报
回复
哦。要用指针,不能用容器?那自己建hash吧,或者位图,这样才有效率。
  • 打赏
  • 举报
回复
怎么跟腾讯上次考的一个题目有点类似。
可不可以用map的啊,或者都想用hash来做了。


void main()
{
set<char> c_set,t_set;
char ch,res[200];
cout<<"输入原始字符串,以&结束"<<endl;
while(cin>>ch)
{
if(ch!='&')
c_set.insert(ch);
else
break;
}
cout<<"输入匹配字符串,以&结束"<<endl;
while(cin>>ch)
{
if(ch!='&')
{
if(c_set.find(ch)!=c_set.end())
t_set.insert(ch);
}
else
break;
}
for(set<char>::iterator iter=t_set.begin();iter!=t_set.end();++iter)
cout<<*iter<<" ";
}
Small_CF 2009-06-13
  • 打赏
  • 举报
回复
学习了。
lambert_s 2009-06-13
  • 打赏
  • 举报
回复
有没有一些有效率的好的算法可以解决这种问题?
pathuang68 2009-06-13
  • 打赏
  • 举报
回复
如果不考虑效率,这个问题并不难。
wanyuzhen 2009-06-13
  • 打赏
  • 举报
回复
经典
liubuweiright 2009-06-13
  • 打赏
  • 举报
回复
学习。。。
lzh9955 2009-06-13
  • 打赏
  • 举报
回复
关注!
飞天御剑流 2009-06-13
  • 打赏
  • 举报
回复
我上面那程序可以简化一下,遍历的同时输出就行了:



#include <iostream>

#define MAX 100

int main(void)
{
using namespace std;
char String1[MAX], String2[MAX];
cout << "String1: ";
cin.getline( String1, MAX );
String1[MAX - 2] = '&'; //防止输入的字符数量达到最大值导致最后的&被\0覆盖
cout << "String2: ";
cin.getline( String2, MAX );
String2[MAX - 2] = '&'; //防止输入的字符数量达到最大值导致最后的&被\0覆盖
int Result[26] = {0};
char *Pointer1 = String1, *Pointer2 = String2;
while( *Pointer1 != '&' )
{
if( !Result[*Pointer1 - 'a'] ) Result[*Pointer1 - 'a'] = 1;
++Pointer1;
}
while( *Pointer2 != '&' )
{
if( Result[*Pointer2 - 'a'] == 1 )
{
cout << *Pointer2 << " ";
Result[*Pointer2 - 'a'] = 2;
}
++Pointer2;
}
return 0;
}
飞天御剑流 2009-06-13
  • 打赏
  • 举报
回复

#include <iostream>

#define MAX 100

int main(void)
{
using namespace std;
char String1[MAX], String2[MAX];
cout << "String1: ";
cin.getline( String1, MAX );
String1[MAX - 2] = '&'; //防止输入的字符数量达到最大值导致最后的&被\0覆盖
cout << "String2: ";
cin.getline( String2, MAX );
String2[MAX - 2] = '&'; //防止输入的字符数量达到最大值导致最后的&被\0覆盖
int Result[26] = {0};
char *Pointer1 = String1, *Pointer2 = String2;
while( *Pointer1 != '&' )
{
if( !Result[*Pointer1 - 'a'] ) Result[*Pointer1 - 'a'] = 1;
++Pointer1;
}
while( *Pointer2 != '&' )
{
if( Result[*Pointer2 - 'a'] ) Result[*Pointer2 - 'a'] = 2;
++Pointer2;
}
for( int i = 0; i < 26; ++i ) if( Result[i] == 2 ) cout << char( 'a' + i ) << " ";
return 0;
}

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧