zoukankan      html  css  js  c++  java
  • 字符串中统计单词个数

    用到的几个小知识

    1.字符串流是以空格作为一个字符串的结束标志,采用stringstream来提取单词。

    2.为了消除重复单词,需要先将vector排序,使得重复的单词相邻出现,不先排序无法正确“删除”重复元素

    3.使用unique STL算法来重排vector,使得不重复的元素出现在vector的开始部分。

    代码如下:

    #include "stdafx.h"
    #include <string.h>
    #include <algorithm>
    #include <vector>
    #include <deque>
    #include <functional>
    #include <iostream>
    #include <list>
    #include <sstream>
    #include <iterator>
    #include <functional>
    
    using namespace std;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    
    	stringstream ss;
    	string str = "the quick red fox jumps over the slow red turtle";
    	string strWord;
    	vector<string> vecWords;
    
    	ss.clear();
    	ss.str(str);
    	while (ss >> strWord)
    	{
    		vecWords.push_back(strWord);
    		strWord.clear();
     	}
    	
    	cout << "sort before:" << endl;
    	copy(vecWords.begin(), vecWords.end(), ostream_iterator<string>(cout, " "));
    	cout << endl;
    
    	cout << "sort after and unique before:" << endl;
    	
    	//从大到小排序
    	//sort(vecWords.begin(), vecWords.end(),greater<string>());
    	//默认是从小大的字典排序
    	sort(vecWords.begin(), vecWords.end());
    	copy(vecWords.begin(), vecWords.end(), ostream_iterator<string>(cout, " "));
    	cout << endl;
    	
    	vector<string> vecWordsBackup(vecWords);
    
    	cout << "sort and unique afer:" << endl;
    	unique(vecWords.begin(),vecWords.end());
    	copy(vecWords.begin(), vecWords.end(), ostream_iterator<string>(cout, " "));
    	cout << endl;
    
    	cout << "sort and unique and erase after:" << endl;
    	vecWordsBackup.erase(unique(vecWordsBackup.begin(),vecWordsBackup.end()), vecWordsBackup.end());
    	copy(vecWordsBackup.begin(), vecWordsBackup.end(), ostream_iterator<string>(cout, " "));
    	cout << endl;
    
    	cout << "total words:"<<vecWordsBackup.size() <<endl;
    
    	return 0;
    }


    运行结果:



  • 相关阅读:
    Adobe Acrobat XI Pro破解版 v11.0.10中文版
    linux经典面试题
    P1540 机器翻译(STL 链表)
    P1067 多项式输出 (模拟)
    P1003 铺地毯
    [CF547C] Mike and Foam
    [CF351B] Jeff and Furik
    [CF900D] Unusual Sequences
    [CF568B] Symmetric and Transitive
    [CF893E] Counting Arrays
  • 原文地址:https://www.cnblogs.com/jinxiang1224/p/8468433.html
Copyright © 2011-2022 走看看