C++ 保留c+中的标点符号+;

C++ 保留c+中的标点符号+;,c++,vector,C++,Vector,有人能帮我吗?在代码中,我没有删除如图所示的标点符号,而是需要将其删除,以便在其前面的单词从缩写形式扩展后重新使用。任何帮助都将不胜感激。注:这只是代码的一个功能,用于显示矢量和打开填充等。。。已被置于不同的功能中 void readText2(ifstream &infile, vector <string> &textFile2 ) { while( !infile.eof() ) { string fileWord;

有人能帮我吗?在代码中,我没有删除如图所示的标点符号,而是需要将其删除,以便在其前面的单词从缩写形式扩展后重新使用。任何帮助都将不胜感激。注:这只是代码的一个功能,用于显示矢量和打开填充等。。。已被置于不同的功能中

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();
}
void readText2(ifstream&infle、vector&textFile2)
{
而(!infle.eof())
{
字符串文件字;
内嵌>>文件字;
对于(size_t i=0;i!=fileWord.length();i++)
{
fileWord[i]=toupper(fileWord[i]);
}
对于(size_t i=0;i
我建议遍历字符串结尾开始(以保留正确的索引号),并在循环内将索引+标点符号字符存储在std::map中

您的函数被黑客攻击,并在其中添加了内容更改的注释:

// 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
}
//已更改返回类型
矢量读取文本2(ifstream和infle、矢量和文本文件2)
{
向量vPunct;//已添加
而(!infle.eof())
{
字符串文件字;
内嵌>>文件字;
对于(size_t i=0;i!=fileWord.length();i++)
{
fileWord[i]=toupper(fileWord[i]);
}
map mPunct;//构造一个映射
//如果未找到标点符号,则地图将保持为空
对于(size\u t i=fileWord.length()-1;i>=0;i--)//反向循环
{
if(ispunt(fileWord[i]))
{
//存储索引+标点字符
mPunct.insert(成对(i,fileWord[i]);
fileWord.erase(i);
}
}
textFile2.推回(fileWord);
vPunct.push_back(mPunct);//将映射添加到向量
}
infle.close();
return vPunct;//返回向量
}
标点现在存储在函数返回的第二个向量中。例如:textFile[20]中的字符串的标点符号存储在vPunct[20]中


将标点符号与字符串一起存储在一个
向量中会更可靠,但这会改变函数的外部行为,我不知道这是否适合您

不清楚你想做什么。你能对你试图解决的问题给出一个整体的高层次的描述吗?我正在把一个字符串一个字符串地读入字符串文件词中,但是我不希望它将标点符号存储在字符串的末尾,而是希望它被取出并存储在其他地方,因此var fileWord只保存字母而不保存标点符号。所以你不需要标点符号?你要解决的问题是什么?“我需要把它去掉,以便以后在“如何”中重复使用哪位资源指导您这么做?是的,那将非常有帮助:)为youwow制作了一个示例实现-非常感谢,这真的非常有帮助-并且可以理解。:)