文字の切り取り

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
str

文字の切り取り

#1

投稿記事 by str » 16年前

指定した位置から文字を切り取りたいです。

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

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

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

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

MNS

Re:文字の切り取り

#2

投稿記事 by MNS » 16年前

std::stringには、そのような機能がありますよ。

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

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

たかぎ

Re:文字の切り取り

#3

投稿記事 by たかぎ » 16年前

std::basic_string<...>::substrを使うか、Cスタイルの単純な文字列の場合はstrncpyを使います。

str

Re:文字の切り取り

#4

投稿記事 by str » 16年前

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

MNS

Re:文字の切り取り

#5

投稿記事 by MNS » 16年前

str.c_str() で出来ませんか?
std::string を char* に変換することが出来ます。

str

Re:文字の切り取り

#6

投稿記事 by str » 16年前

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 に変換ではないでしょうか?

MNS

Re:文字の切り取り

#7

投稿記事 by MNS » 16年前

(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関数は文字列の長さを返します。)

str

Re:文字の切り取り

#8

投稿記事 by str » 16年前

MNS様
表示できました~
ありがとうございます。

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

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

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

閉鎖

“C言語何でも質問掲示板” へ戻る