-vector関連
vector vの要素をデバッグ時に見たいとき
ウォッチにv._Myfirst[n]と書けばn番目の要素を見ることができる
-fstream関連
istream &getline( char *バッファ, streamsize 文字数 );
istream &getline( char *バッファ, streamsize 文字数, char 境界文字 );
getline()関数は入力ストリームに対して使用し、以下の条件に合うまでバッファ に文字列を読み込む:
* 文字数 - 1 文字読み込む
* 新しい行が始まる
* EOFに到達する
* 境界文字 まで読み込む。境界文字はバッファ には入らない
-string関連
文字列から一定の区切り文字(デリミタ)を除去して読み取る関数の一例
std::vector<std::string> split(const std::string& str, const std::string& delimiter) {
// delimiter(2 文字以上も可) を空白に置換
std::string item(str);
for(unsigned pos = item.find(delimiter); pos != std::string::npos; pos = item.find(delimiter, pos)) {
item.replace(pos, delimiter.size(), " ");
}
// 分解
std::stringstream buf(item);
// 読み取り
std::vector<std::string> result;
while(buf >> item) {
result.push_back(item);
}
return result;
}
-環境による問題
日本語のコメント
gccとVCでソースを共用する場合にありがちなのがコメントにShift-JIS(cp932)を書いてトラブルに
なることです. たとえば次のコードはgccでコンパイルすると何も表示されません.
#include <stdio.h>
int main()
{
// 分解能
puts("hello");
}
理由は"分解能"の能の2byte目が\なので次の行と連結されて消えてしまうからです.
>gcc -E t.c
int main()
{
}
これは-finput-charsetオプションで入力文字コードを指定することで解決できます.
>gcc -E t.c -finput-charset=cp932
int main()
{
puts("hello");
}
あるいはCスタイルのコメント/* ... */を必ず使うというやりかたもあります.
なお, 文字列定数の中に直接Shift-JISを入れてしまうとLinux環境ではトラブルになることが多いので
避けた方がよいでしょう.
最終更新:2009年11月19日 07:26