因此,我试图在C++中写入一个文件I/O,其中用户希望翻译一种不同的语言,例如将莫尔斯电码翻译为英语。我使用morseToEnglish()函数并将其作为输出文件的标记传入。我遇到的问题是,我得到了正确的输出,但我在某个地方缺少了一个换行符。
以下是我到目前为止的情况:
char morsing[256]; //reading line by line
if (inputfile.is_open())
{
while (inputfile.getline(morsing, 256)) // reading character by character
{
token = strtok(morsing, "|"); //break each word into token
cout << "Read the input file: " << "morsingMC.mc" << endl;
while (token != NULL)
{
**outputfile << morseToEnglish(morsing); **
token = strtok(NULL, "|");
}
}
}
如果我在做
outputfile << morseToEnglish(morsing);
这将是输出:
123 456 789123 456 789123 456 789123 456 789123 456 789
而不是:
123 456 789
123 456 789
123 456 789
123 456 789
123 456 789
我也试过在我的输出文件中使用endl和“\n”,但这会将每个单词输出到token中。这是一个很小的变化,但是我如何修改我的换行符,使我的输出将转到一个换行符,而不破坏令牌?
编辑:morseToEnglish()是一个将莫尔斯电码转换为英文的函数,该英文在头文件中,inputfile/outputfile分别为ifstream/ofstream
1条答案
按热度按时间x6h2sr281#
好吧,让我们从一个非常简单的建议开始:当你在编写C++时,忘记你甚至听说过
strtok
。别用它永远别用当你在做这个的时候,最好也忘记
std::istream::getline
的存在。如果你想读取一行数据,你的第一选择通常应该是std::getline
。这与std::string
一起工作--它通常是存储/表示/操作字符串的首选。是的,所有这些都有例外,但它们都是合理的起点,除非你有一些特别的理由去做。
说到这个问题,我猜你有一些输入,比如:
因此,例如,如果一行输入包含经典的“SOS”,它将是类似于:
到目前为止,至少看起来很接近现实?
我还猜测,您希望实现的是读取一行,将该行上的每个标记翻译成英语,打印出标记,打印一个新行,然后继续下一行,重复直到文件结束。
假设情况是这样的,我会写这样的代码:
然后
process
将处理一行输入,如下所示:这是在猜测你想要什么,但如果我没有阅读的话,它似乎至少相当接近。