c ++ char vector,删除带有数字的单词加上坏单词后的空格

时间:2018-02-21 07:07:52

标签: c++11 vector

我认为我非常接近解决这个问题,但我在其中一条线路上遇到了总线错误。我有一个程序,从一个文件中读取所有单词买入将它们分成字符。有些单词中有数字或标点符号,程序假定在坏单词之后抛出并删除这些单词加上任何空格。比输出新句子。我已经过了很多次,现在一切看起来都很合理,所以我被卡住了。我保留了字符(Ccount),空格(Scount)和坏字符(bcount)的计数,它们是坏字和后面的空格中的任何字符。这是我正在处理的部分的代码。

if(cFlag == true){
    int Ccount = 0;
    int Scount = 0;
    int Bcount = 0;

    for(unsigned int i=0; i<chars.size(); i++){
        if(isalpha(chars[i])){
            if(Bcount == 0 ){
                ctemp.push_back(chars[i]);
                Ccount++;
                Scount = 0;
            }
            else if(Bcount != 0 && Scount == 0){
                ctemp.push_back(chars[i]);
                Bcount++;
            }
            else if(Bcount != 0 && Scount != 0){
                for(int i = 0; i < Bcount; i++)
                    ctemp.pop_back();
                ctemp.push_back(chars[i]);
                Bcount = 0;
                Scount = 0;
            }
        }
        else if(isspace(chars[i])){
            if(Bcount == 0){
                ctemp.push_back(chars[i]);
                Ccount = 0;
                Scount++;
            }
            else if(Bcount != 0){
                //for (int i=0; i<Bcount; i++)
                    //ctemp.pop_back();
                ctemp.push_back(chars[i]);
                Bcount++;
                Scount++;


            }
        }
        else if(ispunct(chars[i]) || isdigit(chars[i])) {
            ctemp.push_back(chars[i]);
            Bcount = Ccount;
            Bcount++;
            Ccount = 0;
        }
    }
    chars.clear();
    for (unsigned int i=0; i<ctemp.size(); i++)
        chars.push_back(ctemp[i]);

}

1 个答案:

答案 0 :(得分:0)

所有我需要的是if else语句中的Ccount ++,其中包含任何增量器。我得到了一个新词,而不是删除所有以前的坏空格和字母,但不计算新Ccount中新单词的第一个字母。