ページ 11

文字の切り取り

Posted: 2009年6月07日(日) 04:55
by str
指定した位置から文字を切り取りたいです。

PHPで以前プログラムを書いていた時にsubstr関数という便利なものがあったのですが

そのような関数はC++かWindowsAPIで用意されていないでしょうか?

char strTest_1[128] = "あいうえお";
char strTest_2[128] = 関数名(str_Test[/url],2,2);
↑2文字目から2文字切り取るみたいな

これで出力すると「うえ」ないのでしたら
これに似た関数を作りたいのですがどうすればよろしいのでしょうか・・・・?

Re:文字の切り取り

Posted: 2009年6月07日(日) 07:34
by MNS
std::stringには、そのような機能がありますよ。

http://www.geocities.jp/ky_webid/cpp/library/001.html
(こちらのサイトなどをご覧になってみてください。)

具体的には、std::string::substr()という関数を使用します。

Re:文字の切り取り

Posted: 2009年6月07日(日) 09:29
by たかぎ
std::basic_string<...>::substrを使うか、Cスタイルの単純な文字列の場合はstrncpyを使います。

Re:文字の切り取り

Posted: 2009年6月07日(日) 13:01
by str
Cにもあるのですねw
using namespace std;
		string str( "あいうえお" );
		str.substr(2,1);
これをDrawTextやTextOutなどに渡したら型が違うとエラーが出てしまいました。
表示はどのようにすればよいのでしょうか?

Re:文字の切り取り

Posted: 2009年6月07日(日) 13:36
by MNS
str.c_str() で出来ませんか?
std::string を char* に変換することが出来ます。

Re:文字の切り取り

Posted: 2009年6月07日(日) 13:51
by str
using namespace std;
		string str( "あいうえお" );
		str.substr(2,1);
		str = str.c_str();
		
		TextOut(hMemDC, 100, 100, str, strlen(str));
これでかいてみたのですが変換できないです・・・。

std::string を char* にではなく
char* を std::string に変換ではないでしょうか?

Re:文字の切り取り

Posted: 2009年6月07日(日) 14:14
by MNS
(WinAPIの仕様経験は皆無に等しいので、検討はずれなことをいっているかもしれませんが)
TextOut関数が文字列の引数として取る型はLPCTSTRですよね。
非ユニコード環境で開発されているようですので、
LPCTSTR は const char* と同等です。
なので、std::string を const char* に変換する必要があります。
std::string のメンバ関数である c_str は、const char* として文字列を返します。
よって、
TextOut(hMemDC, 100, 100, str.c_str(), str.length());
で実行できるはずです。
(length関数は文字列の長さを返します。)

Re:文字の切り取り

Posted: 2009年6月07日(日) 14:27
by str
MNS様
表示できました~
ありがとうございます。

2バイト文字なので注意が必要みたいですねw

たかぎ様
strncpyでもやってみてできました。

皆様ありがとうございました。