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
是一个string
,position
是一个int
。当您将 int
添加到 string
时,它被视为从 int
代码创建的 char
,其中许多 chars
在 ASCII [=25] 的开头=] 甚至都不是 printable。 See for yourself
这个论坛是新来的,所以我希望我的格式没问题。
下面的意思是遍历 .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
是一个string
,position
是一个int
。当您将 int
添加到 string
时,它被视为从 int
代码创建的 char
,其中许多 chars
在 ASCII [=25] 的开头=] 甚至都不是 printable。 See for yourself