C++ 写奇怪的符号而不是字符

C++ writing strange symbols instead of characters

这个论坛是新来的,所以我希望我的格式没问题。

下面的意思是遍历 .txt 中的字符串 (sections),然后 运行 一个函数 nuc() 对字符串 ([=13] 中的每个字符=]).每个字符的 nuc() 要么将字符添加到名为 fragment 的字符串,要么添加句点 "."。如果nuc在字符串末尾执行,它应该将片段写入文本文件"fragments.txt"。因为 nuc 是在自身内部执行的,所以它首先将片段缩短到 nuc 正在执行的位置。

不幸的是,当我执行代码时,它似乎没有写入字符,而是写入了奇怪的符号(旋转的 L 或纸牌花色)。我应该使用字符串以外的东西吗?这基本上是从 python 翻译过来的,所以你可以想象我能做到的疏忽。

我在过去两天了解到了其中的大部分内容,所以如果真的是一个愚蠢的疏忽,我提前表示歉意。我怀疑这可能是由于我初始化 nuc 函数的方式,或者我调用它的方式。

在此先感谢您的帮助。我怀疑我的代码看起来很难看。

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

ifstream sections("sections.txt");
ofstream fragments("fragments.txt");
string fragment;


void nuc(string section, int position)
{

    for (int i = 0; i <= 1; i++)
    {
        fragment.resize(position);
        cout << i << endl;
        if (i == 0)
        {
            fragment += ".";
        }
        else if (i == 1)
        {
            fragment += position;
        }

        try
        {
            section.at(position + 1);
            nuc(section, position + 1);
        }

        catch (exception out_of_range)
        {
            fragment += "\n";
            fragments << fragment;
        }

        cout << fragment << endl;
    }
}

int main()
{
    string section;
    int pos = 0;

    while (getline(sections, section))
    {
        nuc(section, pos);
    }

    sections.close();
    system("pause");
    return 0;
}

编辑: 好吧,我通过将 fragment += position 切换为 fragment += section.get(position) (smh) 得到了 运行。现在看来我可以分割比 python 中更长的字符串,但它仍然需要很长时间。任何人都可以提供任何建议来优化代码以使其 运行 更快,例如如果使用迭代器而不是字符串来获取(位置)可能会使它 运行 更快?否则也许有资源可以帮助我了解如何使用这些基本功能优化代码?

你看到很多奇怪字符的原因是

fragment += position;

fragment是一个stringposition是一个int。当您将 int 添加到 string 时,它被视为从 int 代码创建的 char,其中许多 chars 在 ASCII [=25] 的开头=] 甚至都不是 printable。 See for yourself