在c ++中保留标点符号

时间:2013-03-31 16:51:48

标签: c++ vector

任何人都可以帮助我吗?在代码中,我没有删除所示的标点符号,我需要将其删除,以便稍后重新使用它之前的单词已从其缩写形式扩展。任何帮助将不胜感激。 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();
}

1 个答案:

答案 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>>>中会更可靠,但这会改变函数的外部行为,我不知道这是否适合你。