PukiWiki


文字列の置換

文字列を置換する。

_ 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)