string中单词统计
编程背景:已知有string对象,编写程序分离该string中所有单词,将包含'.'的单词转换为float类型,其他的单词转换为int类型
Pass1: 分离单词
string word; char sep = ' '; int startPos = 0, endPos = 0, wordlen = 0; endPos = ss.find_first_of(sep,endPos); //第一个单词是以' '结尾,和下面的while循环处理的情况不同 if (endPos == string::npos) wordlen = ss.size() - startPos; else wordlen = endPos - startPos; word.assign(ss.begin() + startPos, ss.begin() + startPos + wordlen); cout << word << endl; startPos = ss.find_first_not_of(sep, endPos); //设置下次查找的起始位置 while((startPos=ss.find_first_of(sep, endPos)) != string::npos) //找到下一单词起始位置 { ++startPos; endPos = ss.find_first_of(sep, startPos); //找到下一个单词的结束位置 if ((endPos - startPos) != 0) //未连续取了用作分隔的字符 { if(endPos == string::npos) wordlen = ss.size() - startPos; else wordlen = endPos - startPos; word.assign(ss.begin() + startPos, ss.begin() + startPos + wordlen); //获取单词 cout << word << endl; startPos = ss.find_first_not_of(sep, endPos); } //连续取了用作分隔的字符 }
//最后一个单词的处理,创建文件的时候注意添加一个空白符;或者在while循环结束之后特别处理
Pass2: string转换为int和float
char c = '.'; if ( word.find(c) != -1) float f = atof(word.c_str()); else int d = atoi(word.c_str());