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

时间:2018-06-15 05:43:40

标签: c++ function visual-c++ iteration fstream

此论坛的新功能,所以我希望我的格式化正常。

以下内容是对字符串中的每个字符(sections)迭代.txt中的字符串(nuc(),然后运行函数section)。每个字符上的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;
}

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

1 个答案:

答案 0 :(得分:2)

你看到很多怪异角色的原因是因为

fragment += position;

fragmentstringpositionint。当您将int添加到string时,它会被视为从char代码创建的int,并且在ASCII表开头的许多chars都不是甚至可打印。 See for yourself