wafuの技術

技術習得の努力メモです。

C++で、文字列の置換(char)

C++のcharで、文字列の変換です。

標準関数にして欲しいです。

 

#include <iostream>
#include <cstring>

using namespace std;

bool MyReplace(char *str,int maxlen,const char *srcstr,const char *deststr);

int main(){
char str[80] = "ruby python C++ R言語 perl";

//「言語」を「language」に置換
while(MyReplace(str,79,"言語","language"))

//rubyRubyに置換
while(MyReplace(str,79,"ruby","Ruby"))

//文字列の削除
while(MyReplace(str,79,"C++",""))
cout << "置換後: " << str << endl;
return 0;
}

bool MyReplace(char *str,int maxlen,const char *srcstr,const char *deststr){

//終端のNULL文字は置換しない。
if (!*srcstr){
return false;
}
int len = strlen(str) - strlen(srcstr) + strlen(deststr);
if (len > maxlen){
return false;
}

//文字列の検索
char *p = strstr(str,srcstr);

//文字列を新しい文字列と置換
if (p){
memmove(p + strlen(deststr),p + strlen(srcstr),strlen(p) - strlen(srcstr) + 1);

//ここで、部分文字列を文字列にコピーする
strncpy(p,deststr,strlen(deststr));

return true;
}

//置換が行わなければfalseを返す
return false;
}

 

bool search_and_replace(char *str,int maxlen,const char *oldsubstr,const char *newsubstr){
//終端のNULL文字を置換しないようにする
if (!*oldsubstr){
return false;
}
int len = strlen(str) - strlen(oldsubstr) + strlen(newsubstr);
if (len > maxlen){
return false;
}
//文字列の中に指定した部分文字列があるか調べる
char *p = strstr(str,oldsubstr);
//文字列が見つかったら、新しい文字列と置き換える
if (p){
memmove(p + strlen(newsubstr),p + strlen(oldsubstr),strlen(p) - strlen(oldsubstr) + 1);
//ここで、部分文字列を文字列にコピーする
strncpy(p,newsubstr,strlen(newsubstr));

return true;
}
//置換が行わなければfalseを返す
return false;
}