C++ 字符串连接问题

题目是这样的:“使用指针变量p1和p2定义两个字符串,将p2中有但p1中没有的字符连接到p1的后面(若有重复者,只连接一次)。”希望高手把整个程序完整的写出来,我在C++... 题目是这样的:“使用指针变量p1和p2定义两个字符串,将p2中有但p1中没有的字符连接到p1的后面(若有重复者,只连接一次)。”
希望高手把整个程序完整的写出来,我在C++上运行无误后,会确认给分,谢谢!
TO黄帮勇帅哥哥:我用VC6.0试了一下有一个错是这个fatal error C1083: Cannot open include file: 'stdafx.h': No such file or directory 指向第一行

TO二楼匿名回答者:我用VC6.0试了一下有两个错,分别是error C2039: 'strlen' : is not a member of 'std' 和error C2873: 'strlen' : symbol cannot be used in a using-declaration都是指向第六行
展开
 我来答
黄邦勇帅哥哥
2010-03-14 · TA获得超过3987个赞
知道大有可为答主
回答量:1199
采纳率:100%
帮助的人:490万
展开全部
刚才不好意思,没有测试清楚,现在应该可以了,你可以复制进去测试一下了。

我的是用的VC++2005编的,你把stdafx.h头文件这行删了,只考主程序,但string这个头文件别忘了包含,其他的就按你的VC6的标准吧。

是用C++吗?那就可以使用C++中string类的成员函数了,具体见下。你可以输入任何的字符串,本程序都能符合你的题意的要求,比如p1输入adlw,若p2输入adwwdfweferrf则连接后的p1=adlwefr,其中efr是p2中的字符,其中f和r重复出现过,但只有一个被连接到p1中。其adw在p1中出现过,因此adw未被连接进p1中,你也可以输入其他字符测试。

#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <string> //注意,应把这个头文件包含进来。

using namespace std;

void main()

{ string p1,p2;

cin>>p1>>p2; //输入p1和p2的内容。

for(int i=0;i<p2.length();i++) //该循环主要用于清除掉p2中的重复字符。
for(int j=i+1;j<p2.length();j++)
{if(p2[i]==p2[j])
{p2.erase(j,1); //如果p2[i]与p2[i]后面的字符有重复,则把从p2中j开始的一个字符删掉
j--;} //这句一定不能少,当使用erase函数删掉字符后,p2中的j应该回到原来,以便下次重新被if判断到。

}

cout<<"p2="<<p2<<endl; //用于测试,是否清掉了p2中的重复字符。

//以下循环用于找出p2中有,但p1中没有的字符,并把这个字符赋给p3
for(int i=0;i<p2.length();i++)
for(int j=0;j<p1.length();j++)
{
if(p2[i]==p1[j])
{
p2.erase(i,1); }

}

cout<<"p2再次="<<p2<<endl; //用于测试p2是否是找出了p2中有,但p1中没有的字符。

p1.append(p2); //将p2的内容追加到p1的后面。

cout<<"p1="<<p1<<endl; //输出拼接后的字符串p1
system("pause"); //使程序暂停

}
米水胡余
2010-03-13 · TA获得超过302个赞
知道小有建树答主
回答量:238
采纳率:0%
帮助的人:196万
展开全部
请楼主给个连接示例,也就是题目所说的那两个字符串……不然每个人给出的字符串会不同的,呵呵……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tyuthom
2010-03-14
知道答主
回答量:8
采纳率:0%
帮助的人:1.4万
展开全部
#include<iostream>
#include <string>
using namespace std;
int main()
{
string A,B;
cout<<"请输入两串字符"<<endl;
cin>>A>>B;
string::iterator p2=B.begin(), p1=A.begin();
for(;p2!=B.end();++p2,p1=A.begin())
{ while(p1!=A.end()&&(*p1!=*p2))
++p1;
if(p1==A.end()) A.push_back(*p2);
};
cout<<"按规则连接的结果:"<<A;
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2010-03-13
展开全部
编程时的调试环境是VC++2008,没有考虑古老的VC++6.0,为了在VC++6.0中运行,将程序中的using std::strlen;去掉即可.如下:

//---------------------------------------------------------------------------
#include <iostream>
#include <cstring>
using std::cout;
using std::cin;
using std::endl;

bool ishere(char *a,char b) //检查字符b是否在字符串a中出现过,如果出现过则返回true,否则返回false
{
int i,len=strlen(a);
for (i = 0; i<len; i++) {
if (a[i]==b) {
return true;
}
}
return false;
}
char *scat(char *p1,char *p2)//"无重复"地连接p1和p2字符串,即求出p1和p2的并集
{
int i,len1=strlen(p1),len2=strlen(p2);
char *rt=new char[len1+len2+1];
strcpy(rt,p1);

for (i = 0; i<len2; i++) {
if (!ishere(rt,p2[i])) {
rt[len1++]=p2[i];
}
}
rt[len1]='\0';

return rt;
}
int main(void) //测试
{
char *p1="abcde",*p2="fdgchh";
char *pcat=scat(p1,p2);
cout<<pcat<<endl;
delete[] pcat;
return 0;
}
//---------------------------------------------------------------------------
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式