Я использую
// str is a string that holds the line of data from ifs- the text file.
// str holds the words to be split, res the vector to store them in.
while( getline( ifs, str ) )
split(str, res);
void split(const string& str, vector<string>& vec)
{
typedef unsigned int uint;
const string::size_type size(str.size());
uint start(0);
uint range(0);
/* Explanation:
* Range - Length of the word to be extracted without spaces.
* start - Start of next word. During initialization, starts at space 0.
*
* Runs until it encounters a ' ', then splits the string with a substr() function,
* as well as making sure that all characters are lower-case (without wasting time
* to check if they already are, as I feel a char-by-char check for upper-case takes
* just as much time as lowering them all anyway.
*/
for( uint i(0); i < size; ++i )
{
if( isspace(str[i]) )
{
vec.push_back( toLower(str.substr(start, range + 1)) );
start = i + 1;
range = 0;
} else
++range;
}
vec.push_back( toLower(str.substr(start, range)) );
}
Я не уверен, что это особенно полезно для вас, но я попробую. Функция toLower - это быстрая функция, которая просто использует функцию :: toLower (). Это читает каждый символ до пробела, а затем вставляет его в вектор. Я не совсем уверен, что ты имеешь в виду под char за char.
Хотите извлечь символ слова по времени? Или вы хотите проверить каждого персонажа по ходу дела? Или вы имеете в виду, что хотите извлечь одно слово, закончить, а затем вернуться? Если это так, я бы все равно 1) порекомендовал вектор и 2) дал мне знать, чтобы я мог реорганизовать код.