首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

初学者请赐教

2012-02-13 
菜鸟请大虾赐教想实现将以标点或空格借宿的字符串分成单独的单词,却实现不了....急#include iostream#in

菜鸟请大虾赐教
想实现将以标点或空格借宿的字符串分成单独的单词,却实现不了....急
#include <iostream>
#include <vector>
#include <string>
#include <cctype>
using   std::cout;
using   std::cin;
using   std::endl;
using   std::vector;
using   std::string;

int   main()
{
vector <string>   vec;
string   str,   str1;
cout   < <   "Please   enter   some   text:(end   with   newline) "   < <   endl;
        getline(   cin,   str   );

string::size_type   start   =   0,   end   =   0;
for(   string::size_type   i   =   end;   i   !=   str.size();   i++   )
{
                if(   !ispunct(   str[   i   ]   )   &&   !isspace(   str[   i   ]   )   )
{
start   =   i;

for(   int   j   =   1;   i   +   j   !=   str.size();   j++)
        {
                                if(   ispunct(   str[   i   +   j   ]   )   ||   isspace(   str[   i   +   j   ]   )   )
        {
                                          end   =   i   +   j;
  break;
          }  

          }
for(   string::size_type   j   =   start;   j   !=   end;   j++   )
{
str1   +=   str[   j   ];
}
vec.push_back(   str1   );
str1   =   " ";
                       
}

}
cout   < <   vec.size()   < <   endl;
for(   vector <string> ::size_type   i   =   0;   i   !=vec.size();   i++   )
{
cout   < <   vec[   i   ]   < <   endl;
}

return   0;
}

[解决办法]
string::size_type start = 0, end = 0;
for( string::size_type i = end; i != str.size(); i++ )
{
if( !ispunct( str[ i ] ) && !isspace( str[ i ] ) )
{
start = i;

for( int j = 1; i + j != str.size(); j++)
{
if( ispunct( str[ i + j ] ) || isspace( str[ i + j ] ) )
{
end = i + j;
break;
}

}
if(i + j == str.size())
{
end = str.size(); //加这句
}
for( string::size_type k = start; k != end; k++ )
{
str1 += str[ k ];
}
vec.push_back( str1 );
str1 = " ";
i = end - 1; //加这句
}

}
cout < < vec.size() < < endl;
for( i = 0; i !=vec.size(); i++ )
{
cout < < vec[ i ] < < endl;
}
[解决办法]
拆到一个词后索引要向后移位

热点排行