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都是指向第六行 展开
希望高手把整个程序完整的写出来,我在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都是指向第六行 展开
展开全部
刚才不好意思,没有测试清楚,现在应该可以了,你可以复制进去测试一下了。
我的是用的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"); //使程序暂停
}
我的是用的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"); //使程序暂停
}
展开全部
请楼主给个连接示例,也就是题目所说的那两个字符串……不然每个人给出的字符串会不同的,呵呵……
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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;
}
#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;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#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;
}
//---------------------------------------------------------------------------
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询