文字列を置換する。 #contents **C言語 [#bb3702c3] ***一文字の置換 [#o5958f62] 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文字以上の置換 [#c78a7a21] 簡単な方法はない。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++言語 [#w0cf43e5] ***最初の1個を置換 [#ff90ce9e] 最初の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; } ***全部置換 [#fbb7ff63] bbbを全部xxxに置換する。上のをwhileでまわしているだけ。 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 [#d390ea9f] replaceメソッドを使う。 ***最初の1個だけ置換。 [#z67585f8] aaabbbcccaaabbbcccの最初のbbbをxxxに置換 var org = "aaabbbcccaaabbbccc"; var result = org.replace("bbb", "xxx"); alert(result); ***全部置換 [#c36b02d7] aaabbbcccaaabbbcccのbbbをxxxに全部置換 var org = "aaabbbcccaaabbbccc"; var result = org.replace(/bbb/g, "xxx"); alert(result); **Perl [#m438c708] ***最初の1個だけ置換 [#n7b15167] #/usr/bin/perl $s = "aaabbbcccaaabbbccc"; $s =~ s/bbb/xxx/; print "$s\n"; ***全部置換 [#tff89c21] #/usr/bin/perl $s = "aaabbbcccaaabbbccc"; $s =~ s/bbb/xxx/g; print "$s\n";