繁体   English   中英

对以点(。)结尾的行进行排序

[英]Sort lines ending in dot (.)

我的代码有点问题。 我的代码应该剥离除。,:和;以外的所有非字母数字字符。 然后对以新行上的点结尾的行进行排序。 因此,类似:

First, some characters, legal and illegal: )(=8skf-=&. This should be on a separate line. This too.

会成为:

First, some characters, legal and illegal: 8skf.
This should be on a separate line.
This too.

现在,去除非字母数字的代码的第一部分可以正常工作。 排序部分工作到一定程度。 因此,在我的代码中,上面的行实际上变为:

First, some characters, legal and illegal: 8skf.
This should be on a separate line. This too.

我知道这是因为这是新行,并且我的代码在变成新行的过程中无法读取它。 代码是:

   int writeFinalv(string path) {
   readTempFiles(path.c_str());
   string line;
   string nline;
   int start;
   int lnth;
   ifstream temp("temp.txt");
   ofstream final;
   int length;
   final.open(path.c_str(), ios::out | ios::trunc);
   if(temp.is_open()) {
        while(getline(temp, line)) {
            length = line.length();
            for(int i = 0; i < length; i++) {
                if(line[i] == '.') {
                    if(line[i+1] == ' ') {
                        nline = line.substr(0, (i+2));
                    }
                    else {
                        nline = line.substr(0, (i+1));
                    }
                    final << nline << "\n";
                    start = line.find(nline);
                    lnth = nline.length();
                    line.erase(start, lnth);
                }
              }
           }
        }
   else {
      error = true;
   }
   return 0;
}

我的代码首先通过调用该函数来工作,该函数读取初始文件,将其删除非法字符,然后写入临时文件。 然后,它会在截断临时文件后读取该临时文件,查找点,并将新行写入初始文件中。 提前致谢。

通过擦除for循环内的部分line字符串,循环索引将无效。 ilength不再包含可以可靠地用于继续for循环的值。

您实际上实际上不需要从字符串中删除。 您可以跟踪当前的起始位置,并将其用作substr调用的第一个参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM