该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
为方便大家查看,把代码贴出来。
我知道fgo吧老哥人均MIT,嘻嘻
#include
#include
#include
using namespace std;
void Pickup(string *Store,string *A,string *B,int); //将输入的字符串分别赋值给A和B
void DeleteTheSame(string *X,int); //删除string里重复的字符串
void DeleteAFromB(string *A,string *B,int); //将B中与A重复的字符串删除
void Putout(string *M,int); //输出字符串
int main()
{
string *Q[15],*W[15],*E[15];
string Store[15],A[15],B[15];
for (int i=0;i<15;++i){
Q[i]=&Store[i],W[i]=&A[i],E[i]=&B[i];} //给字符串指针赋值首地址
for (int i=0;i<15;++i){
Q[i]=new string[30];W[i]=new string[15];E[i]=new string[15];
}
int n=0;
cout << "请按A->B的格式输入单词和单词串。" << endl;
cout << "请输入行数:(不要超过15)";
cin >> n;
for (int i=0;i
{cout << "请输入第" << i+1 << "行:";
getline(cin,Store[i]);
}
Pickup(*Q,*W,*E,n);
DeleteTheSame(*W,n);
DeleteTheSame(*E,n);
DeleteAFromB(*W,*E,n);
Putout(*W,n);
Putout(*E,n);
return 0;
}
void Pickup(string *Store,string *A,string *B,int n)
{
for (int i=0;i
int a=Store[i].find('-'); //检测‘->’符号所在位置
A[i]=Store[i].substr(0,a-1); //把->符号前的字符串赋给A
B[i]=Store[i].substr(a+2); //把->符号后的字符串赋给B
}}
void DeleteTheSame(string *X,int n)
{
for (int i=0;i
{ if(X[i].empty()) continue; //如果字符串为空,跳过,到下一组
for (int j=i+1;j
{if (X[i]==X[j]) X[j].erase (X[j].begin(), X[j].end());} //检查字符串里是否有重复的,有就删除
}
}
void DeleteAFromB(string *A,string *B,int n)
{
for (int i=0;i
{ if(A[i].empty()) continue; //先检查A的子字符串是否为空
for (int j=0;j
{if (A[i]==B[j]) B[j].erase(B[j].begin(), B[j].end());} //检查B字符串是否和A字符串重复,是的话删除。
}}
void Putout(string *M,int n)
{
for (int i=0;i
}
下面是运行示例;
请按A->B的格式输入单词和单词串。
请输入行数:(不要超过15)2
请输入第1行:请输入第2行:fgo->nb
terminate called after throwing an instance of 'std::out_of_range'
what(): basic_string::substr: __pos (which is 1) > this->size() (which is 0)
而且会出现第一行无法输入,怎么办呀