任何人都可以帮助我吗?在代码中,我没有删除所示的标点符号,我需要将其删除,以便稍后重新使用它之前的单词已从其缩写形式扩展。任何帮助将不胜感激。 N.B这只是代码的一个功能,用于显示向量和打开infile等...已被放置在单独的函数中。
void readText2(ifstream &infile, vector <string> &textFile2 )
{
while( !infile.eof() )
{
string fileWord;
infile >> fileWord;
for (size_t i=0; i !=fileWord.length(); i++)
{
fileWord[i]=toupper(fileWord[i]);
}
for (size_t i=0; i < fileWord.length(); i++)
{
if (ispunct (fileWord[i]))
{
fileWord.erase(i);
}
}
textFile2.push_back(fileWord);
}
infile.close();
}
答案 0 :(得分:0)
我建议遍历字符串end-to-begin(以保留正确的索引号),并在循环内存储std :: map&lt; size_t,char&gt;
中的index + punctuation charactar您的功能被黑了,评论内容发生了变化:
// changed return type
vector<map<size_t,char>> readText2(ifstream &infile, vector <string> &textFile2 )
{
vector<map<size_t,char>> vPunct; // added
while( !infile.eof() )
{
string fileWord;
infile >> fileWord;
for (size_t i=0; i !=fileWord.length(); i++)
{
fileWord[i]=toupper(fileWord[i]);
}
map<size_t,char> mPunct; // construct a map
// map stays empty if no punctuation is found
for (size_t i=fileWord.length()-1; i>=0 ; i--) // reversed loop
{
if (ispunct (fileWord[i]))
{
// store index + punctuation char
mPunct.insert(pair<size_t,char>(i,fileWord[i]));
fileWord.erase(i);
}
}
textFile2.push_back(fileWord);
vPunct.push_back(mPunct); // add map to vector
}
infile.close();
return vPunct; // return vector
}
标点符号现在存储在函数返回的第二个向量中。例如:textFile [20]处的字符串将其标点符号存储在vPunct [20]中。
将标点符号与字符串一起存储在一个vector<pair<string,map<size_t,char>>>
中会更可靠,但这会改变函数的外部行为,我不知道这是否适合你。