文字列の置換
文字列を置換する。
_ C言語
_ 一文字の置換
1バイトの一文字(US-ASCII)の場合を考える。 ここではbをyに置換する。
int main() { char* org = "aaabbbccc"; char* p = strdup(org); char* porg=p; for( ; *p ; ++p ) { if (*p == 'b') *p = 'x'; } printf(porg); free((void*)porg); return 0; }
_ 2文字以上の置換
簡単な方法はない。strstrで検索してから置換する。置換するのも大変。ここでは簡単な例bbbをxxxに置換する。この例ではbbbとxxxが同じ長さなので動くが長さが違うと動かないので注意。
int main() { char* org = "aaabbbccc"; char* target = "bbb"; char* result = "xxx"; char* koko; char* p = strdup(org); koko = strstr(p, target); if ( koko ) { memcpy(koko, result, strlen(result)); } printf(p); free((void*)p); return 0; }
_ C++言語
_ 最初の1個を置換
最初のbbbをxxxに置換する。
#include <string> #include <iostream> int main(int argc, char* argv[]) { std::string strA; strA = "aaabbbcccaaabbbccc"; std::string::size_type nPos = strA.find("bbb"); if(nPos==std::string::npos) return 0; strA.replace(nPos, strlen("bbb"), "xxx"); std::cout << strA; return 0; }
_ 全部置換
bbbを全部xxxに置換する。上のをwhileでまわしているだけ。置換文字列によってはちゃんと動かない。
#include <string> #include <iostream> int main(int argc, char* argv[]) { std::string strA; strA = "aaabbbcccaaabbbccc"; std::string::size_type nPos; while( std::string::npos !=(nPos = strA.find("bbb")) ) { strA.replace(nPos, strlen("bbb"), "xxx"); } std::cout << strA; return 0; }
_ Javascript
replaceメソッドを使う。
_ 最初の1個だけ置換。
aaabbbcccaaabbbcccの最初のbbbをxxxに置換
var org = "aaabbbcccaaabbbccc"; var result = org.replace("bbb", "xxx"); alert(result);
_ 全部置換
aaabbbcccaaabbbcccのbbbをxxxに全部置換
var org = "aaabbbcccaaabbbccc"; var result = org.replace(/bbb/g, "xxx"); alert(result);
_ Perl
_ 最初の1個だけ置換
#/usr/bin/perl $s = "aaabbbcccaaabbbccc"; $s =~ s/bbb/xxx/; print "$s\n";
_ 全部置換
#/usr/bin/perl $s = "aaabbbcccaaabbbccc"; $s =~ s/bbb/xxx/g; print "$s\n";
Link: MenuBar(2464d)
Last-modified: 2017-07-19 (水) 22:33:29 (2464d)