使用后用c ++中的字数(getline(cin,input))?

时间:2014-03-16 13:21:37

标签: c++ string set substring word-count

所以我对此非常陌生。我有一个用于计算用户输入的行数,单词,字符,唯一行和唯一单词的分配。到目前为止,我已经从我的代码中获得了行,唯一的行和字符。我以为我得到了这些单词但是当我考虑到双倍空格和制表符时它就不起作用了。我也不知道如何找到独特的单词。请提供帮助。

代码:

 // What I dont have:
//words
//Total words


#include <iostream>
#include <string>
#include <set>
using namespace std;


unsigned long countWords(const string& s, set<string>& wl);  //total words

int main()
{
     int linenum=0, charnum=0, totalwords=0;
     set<string> lines;
     string input;
     set<string> unique;   //to store unique words from countWords function

while (getline(cin,input))
    {
         lines.insert(input);
         linenum++; 

         charnum+= input.length();


         totalwords += countWords(input,unique);        
    }

    cout << linenum <<"     "<< totalwords <<"     "<< charnum <<"     " << lines.size()<<"     "         << unique.size()<< endl;

         system("PAUSE"); 
     return 0;
}

unsigned long countWords(const string& s, set<string>& wl) //total words        
{
     int wcount=1;         


     for (unsigned int i=0; i < s.length(); i++)
     {   

          if ((s.at(i) == ' ')&&(s.at(i)+1 !='\0')) {
                         wcount++;

                         }

      }    


return wcount;
}

2 个答案:

答案 0 :(得分:0)

以下是该功能的外观示例

#include <iostream>
#include <sstream>
#include <set>
#include <string>
#include <iterator>
#include <algorithm>


unsigned long countWords( std::set<string> &wl, const std::string &s )  
{
    std::istringstream is( s );
    wl.insert( std::istream_iterator<std::string>( is ),
               std::istream_iterator<std::string>() );

    is.clear();
    is.str( s );

    return ( std::distance( std::istream_iterator<std::string>( is ),
                            std::istream_iterator<std::string>() ) );
}

//...

在这个例子中,音调被认为是单词的一部分。

如果您还不知道std :: istringstream和C ++的其他功能,那么您可以通过以下方式编写该函数

#include <iostream>
#include <set>
#include <string>


unsigned long countWords( std::set<string> &wl, const std::string &s )  
{
    const char *white_space = " \t";
    unsigned long count = 0;

    for ( std::string::size_type pos = 0, n = 0; 
          ( pos = s.find_first_not_of( white_space, pos ) ) != std::string::npos;
          pos = n == std::string::npos ? s.size() : n )
    {
        ++count;
        n = s.find_first_of( white_space, pos );
        wl.insert( s.substr( pos, ( n == std::string::npos ? std::string::npos : n - pos ) ) );
    }

    return count;
}

//...

答案 1 :(得分:0)

你需要在括号内放+1,你的功能就像那样

unsigned long countWords(const string& s, set<string>& wl) //total words        
{
     int wcount=0;// initial value must be zero
     int N = 0;// you need to add this to count the characters of each word.
     for (unsigned int i=0; i < s.length(); i++)
     {   
          if ((s.at(i) == ' ')||(s.at(i+1) =='\0')) {// Condition must be or instead of and
                 wl.insert(s.substr(i-N-1,N));
                 ++wcount;
                 N = 0;
              }else ++N;

      }    
return wcount;
}