You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ 统计含2个字母A的行写入新文件时重复写入问题如何解决

问题根因
  • 重复写入核心原因:统计字符A的内层循环中,只要licz==2就立即执行写入和计数,没有终止当前行的遍历。如果某行包含2个以上的A,从第二个A开始,每遍历一个后续字符都会触发一次写入,同一行被重复写入多次,计数也同步虚高。
  • 读取逻辑错误:使用plikwe >> temp读取文件时是按空白符分割读取单词,不是按行读取,不符合你筛选「包含2个A的行」的需求。
  • 文件遍历逻辑不规范:while(!plikwe.eof())的判断方式会导致最后多读取一次空内容存入vector,配套的i < t.size()-1循环条件也会漏掉正常的最后一行内容。
  • 筛选逻辑不严谨:你没有明确筛选规则是「恰好2个A」还是「至少2个A」,现有逻辑只要累计到2个A就触发,且不会停止判断,会把大于2个A的行也按出现次数多次写入。
修复方案

默认需求为筛选恰好包含2个A的行,先输出所有符合条件的行,最后输出总行数,修复后的代码如下:

#include <iostream>
#include <vector>
#include <fstream>
#include <string>

using namespace std;

int main()
{
    ifstream plikwe("NAPIS.txt");
    ofstream pliwky_a("wynika.txt");
    string line;
    int match_count = 0;

    // 按行读取文件
    while (getline(plikwe, line))
    {
        int a_count = 0;
        // 统计当前行A的数量
        for (char c : line)
        {
            if (c == 'A')
            {
                a_count++;
                // 如果已经超过2个可以提前终止统计,优化效率
                if (a_count > 2)
                    break;
            }
        }
        // 遍历完整个行确认A的数量为2再写入
        if (a_count == 2)
        {
            match_count++;
            pliwky_a << line << endl;
        }
    }
    // 最后写入符合条件的总行数
    pliwky_a << match_count << endl;
    cout << match_count << endl;

    plikwe.close();
    pliwky_a.close();
    return 0;
}

如果你的需求是筛选至少包含2个A的行,只需要把判断条件改成if (a_count >= 2)即可。

内容的提问来源于stack exchange,提问作者cray 1234

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 15:45:04