WindowsとLinuxの両方でコードを実行します。 Windowでは、私が意図した結果を得ることができますが、LinuxではWindowから取得したものとは異なる結果になります。WindowsとLinuxのプログラム出力が異なります。どうして?
この違いとLinuxでコードを修正する方法の原因は何ですか?
ありがとうございます! :)私は両方のOSからコード、入力、および結果を添付しました。
以下は私のコードです。 (このコードは、逆ドットで構成要素を注文し、スラッシュを使用してコンポーネントを区別することである。)
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
string set_name = "6000k";
// in
string raw_file = set_name + "_filtered.txt";
// out
string set_file = set_name + "_filtered_dot.txt";
// main
int main()
{
int i = 0;
string comp = "";
string str;
vector<string> input_comp;
vector<string> tmp_comp;
int input_order = 0;
ifstream infile;
infile.open(raw_file);
ofstream outfile;
outfile.open(set_file);
if (infile.fail()) // error handling
{
cout << "error; raw_file cannot be open..\n";
}
while (!infile.fail())
{
char c = infile.get();
if (c == '\n' || c == '/')
{
if (comp != "")
{
input_comp.push_back(comp);
}
int num = input_comp.size();
for (int j = 0; j < num; j++)
{
int idx = (num - 1) - j;
outfile << "/" << input_comp[idx];
}
if (c == '\n')
{
outfile << "/" << endl;
}
input_comp.clear();
str = "";
comp = "";
}
else if (c == '.')
{
if (comp != "")
{
input_comp.push_back(comp);
}
comp = "";
}
else
{
str = c;
comp = comp + str;
}
}
infile.close();
outfile.close();
return 0;
}
これは、コード内で宣言「raw_file」に入力します。
/blog.sina.com.cn/mouzhongshao
/blogs.yahoo.co.jp/junkii3/11821140.html
/allplayboys.imgur.com
これはWindowの結果です。 (これは上のコードから得たいものです)
/cn/com/sina/blog/mouzhongshao/
/jp/co/yahoo/blogs/junkii3/html/11821140/
/com/imgur/allplayboys/
これはLinuxの結果です。 (予期しない結果)
1
while(!infile.fail()) 'は読み込み前にエラーをチェックします。これがうまくいくとは思わないでください。 – user4581301
最後の値には、linuxの改行文字が含まれているようです(例えば、 "html"の代わりに '" html \ n "') – Justin
入力ファイルがウィンドウ上に作成された場合は、 n。これは\ rを出力するので、Linux上で出力を乱すでしょう。 – user4581301