读书人

初学者请赐教

发布时间: 2012-02-13 17:20:26 作者: rapoo

菜鸟请大虾赐教
想实现将以标点或空格借宿的字符串分成单独的单词,却实现不了....急
#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;
}
[解决办法]
拆到一个词后索引要向后移位

读书人网 >C++

热点推荐