これ何て呼びますか

改行で区切られた2つの文字列 a1とa2を受け取って、文字列a2に含まれる文字を文字列a1から全部抜き取るという動作をするプログラム(例 文字列a1 This is a her book. 文字列a2 her 実行結果 This is a book.)を作ろうと考えているのですが、なかなか出来ずに困ってます。どなたか教えて下さい。お願いします。

A 回答 (5件)

No4のやり方だと"hherer."が"her."にならないといけないのに"."になります。


そこでそれを直すとともに速度も速くなるように若干の修正します。

#include<string>
#include<iostream>
using namespace std;
void main(void)
{
unsignedpos;
stringstr;
char*a;
chara1[]="This is a her book.hherer.";
chara2[]="her";
//
for(str=a1,pos=0;(pos=str.find(a2,pos))!=string::npos;str.erase(pos,strlen(a2)));
strcpy(a=new char[str.size()+1],str.c_str());
cout<<"a1="<<a1<<endl;
cout<<"a2="<<a2<<endl;
cout<<"str="<<str<<endl;
cout<<"a="<<a<<endl;
delete[]a;
}

結果:
a1=This is a her book.hherer.
a2=her
str=This is a book.her.
a=This is a book.her.
    • good
    • 0

文字列a2がいっぱいある場合には


#include<string>
#include<iostream>
using namespace std;
void main(void)
{
unsignedpos;
stringstr;
char*a;
chara1[]="This is a her book.That is a her notebook.";
chara2[]="her ";
//
for(str=a1;(pos=str.find(a2))!=string::npos;str.erase(pos,strlen(a2)));
strcpy(a=new char[str.size()+1],str.c_str());
cout<<"a1="<<a1<<endl;
cout<<"a2="<<a2<<endl;
cout<<"str="<<str<<endl;
cout<<"a="<<a<<endl;
delete[]a;
}
結果:
a1=This is a her book.That is a her notebook.
a2=her
str=This is a book.That is a notebook.
a=This is a book.That is a notebook.
    • good
    • 0

もっと簡潔にすれば・・・



#include<string>
#include<iostream>
using namespace std;

void main(void)
{
string str;
char *a;
char a1[]="This is a her book.";
char a2[]="her";

(str=a1).erase(string(a1).find(a2),string(a2).size());
strcpy(a=new char[str.size()+1],str.c_str());
cout<<"a1="<<a1<<endl;
cout<<"a2="<<a2<<endl;
cout<<"str="<<str<<endl;
cout<<"a="<<a<<endl;
delete[]a;
}
結果:
a1=This is a her book.
a2=her
str=This is a book.
a=This is a book.
    • good
    • 0

#include<string>


#include<iostream>
using namespace std;

void main(void)
{
string str,str1,str2;
char *a;
char a1[]="This is a her book.";
char a2[]="her";

str1=a1;str2=a2;
(str=str1).erase(str1.find(str2),str2.size());
a=new char[str.size()+1];
strcpy(a,str.c_str());
cout<<"str1="<<str1<<endl;
cout<<"str2="<<str2<<endl;
cout<<"str="<<str<<endl;
cout<<"a="<<a<<endl;
delete[]a;
}

結果:
str1=This is a her book.
str2=her
str=This is a book.
a=This is a book.
    • good
    • 0

a2に含まれる文字ということは、hも抜き取るんでしょうか?それなら、Tis is...になりますね。



そうではなく、a2にマッチした部分を削除するんでしたら、まずは文字列検索(照合)をしてどこにマッチする部分があるかを調べる必要があります。

ナイーブな方法ならいろいろありますが、洗練された方法の一つにboyer moore法があります。参考URLにあげますので、調べてみてください。

参考URL:http://www.people.or.jp/~fussy/algo/algo7-4.htm
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報