#contents * 文字を区切る.文字長 [#jf396551] strtok, strlen のワイド文字列版をすぐ忘れる wcstok と wcslen である. * 文字コードの確認 [#tb3794e8] -[[ここ:http://oss.timedia.co.jp/show/MySQL%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%81%AE%E6%97%85/Linux%E3%81%AE16%E9%80%B2%E3%83%80%E3%83%B3%E3%83%97%E3%83%84%E3%83%BC%E3%83%AB(od,xxd)]]を参照 $ echo -n '記号' | od -x 0000000 a8e8 e598 b78f とすると,マルチバイト文字ごとに,バイトの連なりが逆になってしまう. そこで次のように処理する. $ echo -n '記号' | hexdump -C 00000000 e8 a8 98 e5 8f b7 * 単純な文字列渡し [#x63df67d] #include<iostream> #include <string.h> using namespace std; void test(char * input){ cout << input << endl; } int main() { char input[5120]; strcpy(input , "これはテスト"); test(input); return 0; } * コンテナクラスの参照渡し [#la2cf6c4] #include <map> #include <vector> #include<iostream> using namespace std; void setText(vector<string> &v, map <string, int> &m1, map<string, int>::iterator & pa){ cout << "v.size = " << v.size(); pa = m1.begin();// for(int i = 0; i < v.size(); i++){ // pa = m1.find(v[i]); if( (pa = m1.find(v[i])) != m1.end()){ // if( (m1.find(v[i]))->second > 0){ //すでにマップにあるのなら cout << "find" << endl; pa->second = pa->second + 1; // (m1.find(v[i]))->second = ( (m1.find(v[i]))->second) + 1; //二つ目の数値を加算 } else{// そうでないなら,データを挿入 // pa.first = v[i]; // pa.second = 1; m1.insert(make_pair(v[i], 1)); // cout << "find " << endl; } }// end_for } int main() { vector<string> v; map<string, int> m1; map<string, int>::iterator pa; v.push_back("加藤"); v.push_back("鈴木"); v.push_back("佐藤"); v.push_back("山田"); setText(v,m1,pa ); pa = m1.begin(); int n = (int)m1.size(); for(int i = 0; i < n; i++){ cout << pa->first << " " << pa->second << endl; pa++; } return 0; } その2 #include <map> #include <vector> #include<iostream> using namespace std; void setText(vector<string> &v, map <string, int> & m1, map <string, int> & m2, int z, map<string, int>::iterator & pa, map<string, int>::iterator & pa2 ){ cout << "v.size = " << v.size(); for(int i = 0; i < v.size(); i++){ if( (pa = m1.find(v[i])) != m1.end()){ cout << "find in ma1" << endl; pa->second = pa->second + 1; } else{ // そうでないなら,データを挿入 // pa.first = v[i]; // pa.second = 1; m1.insert(make_pair(v[i], 1)); // cout << "find " << endl; } // pa = m1.find(v[i]); if( (pa2 = m2.find(v[i])) != m2.end()){ cout << "find in ma2" << endl; pa2->second = pa2->second + 1; // (m1.find(v[i]))->second = ( (m1.find(v[i]))->second) + 1; //二つ目の数値を加算 } else{ // そうでないなら,データを挿入 m2.insert(make_pair(v[i], 1)); } }// end_for } int main() { int i = 0; int j = 0; vector<string> v; map<string, int> m1,m2[2]; map<string, int>::iterator pa, pa2; v.push_back("加藤"); v.push_back("鈴木"); v.push_back("佐藤"); v.push_back("山田"); for(i =0; i < 2; i++){ pa = m1.begin(); pa2 = m2[i].begin(); // setText(v, m1, m2, i, pa, pa2); setText(v, m1, m2[i], i, pa, pa2); } int n = (int)m1.size(); pa = m1.begin(); for(i = 0; i < n; i++){ cout << pa->first << " " << pa->second << endl; pa++; } cout << "next" << endl; for(i = 0; i < 2; i++){ cout << "i = " << i << endl; pa2 = m2[i].begin(); for(j = 0; j < n; j++){ cout << " j = " << j << endl; cout << " " <<pa2->first << " " << pa2->second << endl; pa2++; } } return 0; } *[[コンパイラやOSのdefinedフラグについて:http://www.nbrains.net/php/pukiwiki/index.php?link%BD%B8%2F%B3%AB%C8%AF%B8%C0%B8%EC%B7%CF%2FC%2B%2B]] [#ib67e3b3] *[[Vectorに納めたstringの取り出し]] [#a940ea3b] *[[strtokとchar_strtok]] [#h35daddc] * [[マルチバイト文字とワイド文字の変換wcstok_wcstombs_etc>wcstok_wcstombs_etc]] [#o1f7c048] * stringオブジェクトをprintfで表示 [#ef99228f] よく忘れてはまる.pa は map <string,int> ma のイテレーターとする printf("word = %s: freq = %d\n", (pa->first).c_str(), pa->second ); * [[mapコンテナから要素を削除する]] [#ib24655b] * [[malloc再考>hidden_malloc]] [#ca6ccbea] * [[C_N-gram]] [#ha177611] * [[C_日本語一文字を取得]] [#x344101e] -* gcc-4.0だと、エンコーディングを指定してコンパイルする ことができる. $ gcc -finput-charset=Shift_JIS hoge.c -o hoge.o * [[hidden_C_N-gram]] [#j6e210da] * [[hidden_C_CharCode]] [#sa14f81d] * [[ディレクトリ操作dirent.h]] [#q17036ad] * [[strtokとmap]] [#l2926178] * [[stringとchar]] [#n3161220] * extern [#p19d2e87] http://osdir.com/ml/gnu.mingw.user/2002/msg03869.html > "__declspec(dllimport)" and "extern __declspec(dllexport)" both imply a declaration, but that "__declspec(dllimport)" causes the linker to look for the __imp symbol in an import library, while "extern __declspec(dllexport)" declares a function that must be defined in the program's source (no __imp prefix). < 設定されている環境変数を表示するには、printenvコマンドを * -fPIC は共有ライブラリ (*.so)を作成するオプション [#n843e3bd] //http://oshiete1.goo.ne.jp/qa1936970.html 正確には,リンカの一に依存しないコードを生成する.&htmlinsert(amazontext,asin=4873113032,text=クックブック); p.34 * [[ライブラリの構築>http://docs.sun.com/source/806-4837/Building.html]]* [#aa3f5f90] * [[Boost_regex]] [#vf944a8b] * [[Cでメモリを節約して文字列を読む]] [#o088c089] * [[C_INCLUDE_PATH]] [#fc0db8d7] * [[ヘッダファイルの場所]] [#neb60e6b] * [[sizeofについて]] [#a0365a3f] * [[const_castの使い方]] [#c1caa9b7] * [[C++とヘッダ]] [#k1aead24] * [[Cで文字列を空にする]] [#qf247e2c] * [[Cで動的に配列を作成する]] [#tf578c2e] * [[C++での正規表現>CPP_regex]] [#hdd659fe] * [[CPP_file_tokenize]] [#r5a2a3e8] * [[CPP_vectorの使い方]] [#qda05f47] * [[CPP_mapの使い方]] [#i20c6033] * [[Prog_Mecab]] 和布蕪の出力処理 [#l20d392d] * [[cin関数でのオーバーフロー>Programming_cin]] [#nb13260f]