ここから本文です

プログラムがうまく動きません。(C++) ファイル名を入力し、その各行末のスペー...

pirarucuさん

2013/10/2306:55:14

プログラムがうまく動きません。(C++)
ファイル名を入力し、その各行末のスペースを消去して別のファイルに保存するプログラムを作ったのですが、「echo」を使うと以下の実行結果になってしまいます。

$ echo " abc e " | ./a | od -t x1
cannot open!
0000000 69 6e 70 75 74 20 66 69 6c 65 20 6e 61 6d 65 3a
0000020

[理想]
$ echo " abc e " | ./a | od -t x1
0000000 20 20 20 61 62 63 20 20 65 0a
0000012

以下プログラム

#include<iostream>
#include<string>
#include<fstream>
using namespace std;

int main()
{
string l,txt,outt;

cout<<"input file name:";
cin>>txt;
ifstream fin(txt.c_str());
if(!fin){
cerr<<"cannot open!"<<txt<<endl;
return 1;
}

cout<<"output file name:";
cin>>outt;
ofstream fout(outt.c_str());
if(!fout){
cerr<<"cannnot open!"<<endl;
return 1;
}


while(getline(fin,l))
{
int e=l.size();

for(int i=e-1;i>-1;i--)
{
if(l[i]==' ')
e--;
else break;
}

for(int i=0;i<e;i++)
fout<<l[i];
fout<<endl;
}

return 0;

}

[理想]にするためにはどのように書き換えればよろしいでしょうか?

閲覧数:
212
回答数:
1
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

buy********さん

編集あり2013/10/2307:53:54

>hidehisas2000さん

いろいろな修正方法があると思いますが。
修正してみました。
(連続スペースを_でおきかえ)
echo "___abc__e " | ./a
input file name:cannot open!abc
となってます。

修正箇所はコメント入れてます。


#include<iostream>
#include<string>
#include<fstream>
using namespace std;

int
main ()
{
string l, txt, outt;
/* コメントアウト
cout << "input file name:";
cin >> txt;
ifstream fin (txt.c_str ());
if (!fin)
{
cerr << "cannot open!" << txt << endl;
return 1;
}

cout << "output file name:";
cin >> outt;
ofstream fout (outt.c_str ());
if (!fout)
{
cerr << "cannnot open!" << endl;
return 1;
}


*/
while (getline (cin, l)) //***** fin -> cin に修正
{
int e = l.size ();

for (int i = e - 1; i > -1; i--)
{
if (l[i] == ' ')
e--;
else
break;
}

for (int i = 0; i < e; i++)
cout << l[i]; //***** fout -> cout に修正
cout << endl; //***** fout -> cout に修正
}

return 0;

}


テストを以下で行なうと同じになります。 (スペースを_でおきかえ。)
echo "___abc__e " | ./000003-1 |od -t x1

0000000 20 20 20 61 62 63 20 20 65 0a
0000012

一応理想と同じになってます。


よろしくお願い致します。

質問した人からのコメント

2013/10/23 10:03:32

降参 有難うございます。
問題の意味を勘違いしておりました。
処理の確認のためのプログラムに
ファイルを入、出力してはいけませんね(^_^;)

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる