Programming_C
- 文字を区切る.文字長
- 文字コードの確認
- 単純な文字列渡し
- コンテナクラスの参照渡し
- コンパイラやOSのdefinedフラグについて
- Vectorに納めたstringの取り出し
- strtokとchar_strtok
- マルチバイト文字とワイド文字の変換wcstok_wcstombs_etc
- stringオブジェクトをprintfで表示
- mapコンテナから要素を削除する
- malloc再考
- C_N-gram
- C_日本語一文字を取得
- hidden_C_N-gram
- hidden_C_CharCode
- ディレクトリ操作dirent.h
- strtokとmap
- stringとchar
- extern
- -fPIC は共有ライブラリ (*.so)を作成するオプション
- ライブラリの構築*
- Boost_regex
- Cでメモリを節約して文字列を読む
- C_INCLUDE_PATH
- ヘッダファイルの場所
- sizeofについて
- const_castの使い方
- C++とヘッダ
- Cで文字列を空にする
- Cで動的に配列を作成する
- C++での正規表現
- CPP_file_tokenize
- CPP_vectorの使い方
- CPP_mapの使い方
- Prog_Mecab 和布蕪の出力処理
- cin関数でのオーバーフロー
_ 文字を区切る.文字長
strtok, strlen のワイド文字列版をすぐ忘れる wcstok と wcslen である.
_ 文字コードの確認
- ここを参照
$ echo -n '記号' | od -x 0000000 a8e8 e598 b78f
とすると,マルチバイト文字ごとに,バイトの連なりが逆になってしまう. そこで次のように処理する.
$ echo -n '記号' | hexdump -C 00000000 e8 a8 98 e5 8f b7
_ 単純な文字列渡し
#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; }
_ コンテナクラスの参照渡し
#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フラグについて
_ Vectorに納めたstringの取り出し
_ strtokとchar_strtok
_ マルチバイト文字とワイド文字の変換wcstok_wcstombs_etc
_ stringオブジェクトをprintfで表示
よく忘れてはまる.pa は map <string,int> ma のイテレーターとする
printf("word = %s: freq = %d\n", (pa->first).c_str(), pa->second );
_ mapコンテナから要素を削除する
_ malloc再考
_ C_N-gram
_ C_日本語一文字を取得
- * gcc-4.0だと、エンコーディングを指定してコンパイルする
ことができる.
$ gcc -finput-charset=Shift_JIS hoge.c -o hoge.o
_ hidden_C_N-gram
_ hidden_C_CharCode
_ ディレクトリ操作dirent.h
_ strtokとmap
_ stringとchar
_ extern
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)を作成するオプション
正確には,リンカの一に依存しないコードを生成する. p.34
_ ライブラリの構築*
_ Boost_regex
_ Cでメモリを節約して文字列を読む
_ C_INCLUDE_PATH
_ ヘッダファイルの場所
_ sizeofについて
_ const_castの使い方
_ C++とヘッダ
_ Cで文字列を空にする
_ Cで動的に配列を作成する
_ C++での正規表現
_ CPP_file_tokenize
_ CPP_vectorの使い方
_ CPP_mapの使い方
_ Prog_Mecab 和布蕪の出力処理
_ cin関数でのオーバーフロー
Link: Linuxの備忘録(4656d)
C_N-gram(4656d)
Programming(5148d)
Boost_tokenizer(5595d)
Vectorに納めたstringの取り出し(5856d)
strtokとchar_strtok(5881d)
wcstok_wcstombs_etc(5882d)
CPP_mapの使い方(5883d)
ディレクトリ操作dirent.h(5892d)
mapコンテナから要素を削除する(5892d)
hidden_malloc(5954d)
C_日本語一文字を取得(6030d)
hidden_C_N-gram(6031d)
hidden_C_CharCode(6031d)
strtokとmap(6038d)
stringとchar(6040d)
Boost_regex(6076d)
Cでメモリを節約して文字列を読む(6084d)
C_INCLUDE_PATH(6086d)
ヘッダファイルの場所(6086d)
sizeofについて(6090d)
const_castの使い方(6096d)
C++とヘッダ(6096d)
CPP_regex(6106d)
Cで文字列を空にする(6106d)
Cで動的に配列を作成する(6109d)
CPP_file_tokenize(6148d)
CPP_vectorの使い方(6148d)
Programming_cin(6197d)
Prog_Mecab(6209d)
Last-modified: 2009-06-08 (月) 14:57:50 (5598d)