C++


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

-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環境ではトラブルになることが多いので
避けた方がよいでしょう.