C++;函数从字符串中误读字符 我正在做一个项目,用以在C++中使用OOP。该程序应该从“input.txt”中提取任意字符串,并将其输出到“output.txt”,并转换成莫尔斯电码。这将是有效的,除了某些字符被解释为“.”而不是它应该是什么。我认为显示代码会更有意义

C++;函数从字符串中误读字符 我正在做一个项目,用以在C++中使用OOP。该程序应该从“input.txt”中提取任意字符串,并将其输出到“output.txt”,并转换成莫尔斯电码。这将是有效的,除了某些字符被解释为“.”而不是它应该是什么。我认为显示代码会更有意义,c++,string,class,methods,C++,String,Class,Methods,运行时的输出: Debug, untranslated: T Debug, translated: - Debug, untranslated: h Debug, translated: .... Debug, untranslated: . Debug, translated: ? Debug, untranslated: . Debug, translated: ? Debug, untranslated: . Debug, translated: ? Debug, untranslated

运行时的输出:

Debug, untranslated: T
Debug, translated: -
Debug, untranslated: h
Debug, translated: ....
Debug, untranslated: .
Debug, translated: ?
Debug, untranslated: .
Debug, translated: ?
Debug, untranslated: .
Debug, translated: ?
Debug, untranslated: e
Debug, translated: .
Debug, untranslated:  
Debug, translated:  
Debug, untranslated: r
Debug, translated: .-.
Debug, untranslated: -
Debug, translated: ?
Debug, untranslated: .
Debug, translated: ?
Debug, untranslated: e
Debug, translated: .
Debug, untranslated: d
Debug, translated: -..
Debug, untranslated: .
Debug, translated: ?
Debug, untranslated: .
Debug, translated: ?
Debug, untranslated:  
Debug, translated:  
Debug, untranslated: f
Debug, translated: ..-.
Debug, untranslated: .
Debug, translated: ?
Debug, untranslated: -
Debug, translated: ?
Debug, untranslated: .
Debug, translated: ?
Debug, untranslated: o
Debug, translated: ---
Debug, untranslated: -
Debug, translated: ?
Debug, untranslated: -
Debug, translated: ?
Debug, untranslated: x
Debug, translated: -..-
Debug, untranslated: .
Debug, translated: ?
Debug, untranslated: .
Debug, translated: ?
Debug, untranslated: -
Debug, translated: ?
Debug, untranslated:  
Debug, translated:  
Debug, untranslated: j
Debug, translated: .---
Debug, untranslated: -
Debug, translated: ?
Debug, untranslated: -
Debug, translated: ?
Debug, untranslated: -
Debug, translated: ?
Debug, untranslated: u
Debug, translated: ..-
Debug, untranslated: .
Debug, translated: ?
Debug, untranslated: -
Debug, translated: ?
Debug, untranslated: m
Debug, translated: --
Debug, untranslated: -
Debug, translated: ?
Debug, untranslated: p
Debug, translated: .--.
Debug, untranslated: -
Debug, translated: ?
Debug, untranslated: -
Debug, translated: ?
Debug, untranslated: .
Debug, translated: ?
Debug, untranslated: s
Debug, translated: ...
Debug, untranslated: .
Debug, translated: ?
Debug, untranslated: .
Debug, translated: ?
Debug, untranslated:  
Debug, translated:  
Debug, untranslated: o
Debug, translated: ---
Debug, untranslated: -
Debug, translated: ?
Debug, untranslated: -
Debug, translated: ?
Debug, untranslated: v
Debug, translated: ...-
Debug, untranslated: .
Debug, translated: ?
Debug, untranslated: .
Debug, translated: ?
Debug, untranslated: -
Debug, translated: ?
Debug, untranslated: e
Debug, translated: .
Debug, untranslated: r
Debug, translated: .-.
Debug, untranslated: -
Debug, translated: ?
Debug, untranslated: .
Debug, translated: ?
Debug, untranslated:  
Debug, translated:  
Debug, untranslated: t
Debug, translated: -
Debug, untranslated: h
Debug, translated: ....
Debug, untranslated: .
Debug, translated: ?
Debug, untranslated: .
Debug, translated: ?
Debug, untranslated: .
Debug, translated: ?
Debug, untranslated: e
Debug, translated: .
Debug, untranslated:  
Debug, translated:  
Debug, untranslated: b
Debug, translated: -...
Debug, untranslated: .
Debug, translated: ?
Debug, untranslated: .
Debug, translated: ?
Debug, untranslated: .
Debug, translated: ?
Debug, untranslated: r
Debug, translated: .-.
Debug, untranslated: -
Debug, translated: ?
Debug, untranslated: .
Debug, translated: ?
Debug, untranslated: o
Debug, translated: ---
Debug, untranslated: -
Debug, translated: ?
Debug, untranslated: -
Debug, translated: ?
Debug, untranslated: w
Debug, translated: .--
Debug, untranslated: -
Debug, translated: ?
Debug, untranslated: -
Debug, translated: ?
Debug, untranslated: n
Debug, translated: -.
Debug, untranslated: .
Debug, translated: ?
Debug, untranslated:  
Debug, translated:  
Debug, untranslated: d
Debug, translated: -..
Debug, untranslated: .
Debug, translated: ?
Debug, untranslated: .
Debug, translated: ?
Debug, untranslated: o
Debug, translated: ---
Debug, untranslated: -
Debug, translated: ?
Debug, untranslated: -
Debug, translated: ?
Debug, untranslated: g
Debug, translated: --.
Debug, untranslated: -
Debug, translated: ?
Debug, untranslated: .
Debug, translated: ?
Debug, untranslated: .
Debug, translated: ?
Debug, untranslated: 

Debug, translated: ?
input.txt:

The red fox jumps over the brown dog.
output.txt(运行后填写):

main.cpp:

#include <iostream>
#include <string>
#include <fstream>
#include <unistd.h>
#include <string>
#include <sstream>
#include "morseTranslator.cpp"

using namespace std;

ifstream input("/Users/michaelsimanski/Documents/Projects C++/morse-coded/input.txt"); //init input controller
ofstream output("/Users/michaelsimanski/Documents/Projects C++/morse-coded/output.txt"); //init output controller

int main(int argc, char const *argv[])
{
  if (!(input.is_open() && input.good()))
  {
    cout << "ifstream is FUBAR, exiting";
  }
  else
  {
    cout << "ifstream is open and good, proceeding" << "\n"; //it is right and truly good

    std::stringstream fileContents; //init message, that will be filled by input.txt
    fileContents << input.rdbuf();

    output << morseTranslator::translate(fileContents.str());

    return 0;
  }

  return 0;
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括“MorsetTranslator.cpp”
使用名称空间std;
ifstream输入(“/Users/michaelsimanski/Documents/Projects C++/morse coded/input.txt”)//初始化输入控制器
流输出(“/Users/michaelsimanski/Documents/Projects C++/morse-coded/output.txt”)//初始化输出控制器
int main(int argc,char const*argv[]
{
if(!(input.is_open()&&input.good())
{
库特
将在迭代时更改字符串,并且
convertChar
被插入的点和破折号绊倒

您最好附加并返回
translatedText
。看起来您在某个时候正沿着这条路线前进

将在迭代时更改字符串,并且
convertChar
被插入的点和破折号绊倒


您最好附加并返回
translatedText
。看起来您在某个时候正沿着这条路线前进。

您的问题来自哪里

toBeTranslated.replace(i, 1, morseTranslator::convertChar(toBeTranslated.at(i)));
每次下一次迭代都在解析刚刚替换到字符串中的内容时,您都会使用此命令来践踏整个字符串。您应该在循环中使用
translatedText

translatedText += morseTranslator::convertChar(toBeTranslated.at(i));

然后从函数返回
translatedText
。否则,您需要输入
i
,添加到字符串中的字符量
MorsetTranslator::convertChar(toBeTranslated.at(i))
,以便尝试转换已转换的内容。

您的问题来自

toBeTranslated.replace(i, 1, morseTranslator::convertChar(toBeTranslated.at(i)));
每次下一次迭代都在解析刚刚替换到字符串中的内容时,您都会使用此命令来践踏整个字符串。您应该在循环中使用
translatedText

translatedText += morseTranslator::convertChar(toBeTranslated.at(i));

然后从函数返回
translatedText
。否则,您需要输入
i
,添加到字符串中的字符量
MorsetTranslator::convertChar(toBeTranslated.at(i))
,以便尝试转换已转换的内容。

无关:
\35;包括“MorsetTranslator.cpp”
通常是一件不好的事情。您应该包含标题并编译cpp文件。@user4581301是的,我知道,它是调试一段时间后遗留下来的。我建议在
默认
语句处放置一个断点,然后运行您的程序。请查看字符的值。:-)无关:
\include”MorsetTranslator.cpp"
通常是一件不好的事情。你应该包含标题并编译cpp文件。@user4581301是的,我知道,它是调试一段时间后留下的。我建议在
default
语句处放置一个断点,然后运行你的程序。请查看字符的值。:-)facepalm我上次处理这个问题已经有一段时间了忘记了我在做什么,使用了错误的变量。有时它需要另一组眼睛!谢谢!facepalm自从我上次做这个已经有一段时间了,我忘记了我在做什么,使用了错误的变量。有时它需要另一组眼睛!谢谢!
toBeTranslated.replace(i, 1, morseTranslator::convertChar(toBeTranslated.at(i)));
translatedText += morseTranslator::convertChar(toBeTranslated.at(i));