PukiWiki


文字列の置換 の変更点


文字列を置換する。
#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";