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"))
//rubyをRubyに置換
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;
}