strtokとmap の変更点 - アールメカブ

アールメカブ


strtokとmap の変更点


[[Programming]]

 #include <iostream>
// #include <fstream>
 #include <string>
 #include <map>
 
 using namespace std;
 
 int main(int arg, char *argv[]){
  char *token;
  //  char ss = argv[1];
  char seps[] = " !$\"%^&*()_+=#{}[]:;'`/?,.\t\n\u00a3";
  int i = 0;
  
  char  test[] = "this is a pen. that is a cat.";
  // char  * test = "this is a pen. that is a cat.";
  // Segmentation fault  (core dumped)
 
  string m_token;
  map<string, int> m1;
  map<string, int>::iterator pa;
   
  token = strtok(test, seps);
  while( token != NULL ) 
	{ 
	  
	  //	  char *m_token = token;
	  m_token = token;
	  cout << m_token << endl;
	  if( (pa = m1.find(m_token)) != m1.end()){
		//すでにマップにあるのなら
		pa->second = pa->second + 1;
		//二つ目の数値を加算
	  }
	  else{// そうでないなら,データを挿入
		m1.insert(make_pair(m_token, 1));
	  }
		// 次のトークンを取得します。
	  i++;
	  token = strtok( NULL, seps ); 
	}
  pa = m1.begin();
  int n = (int)m1.size();
  
  for (int i = 0; i < n; i++) {
	cout << pa->first << " " << pa->second << endl;
	pa++;
  }
 }