-1

名前にスペースが含まれるファイルを C++ で開く際に問題があります。たとえば、ファイルを開くにはread me.txt.

これは、ファイルを読み取り、単語数をコンソールに出力する 1 つのコマンドを含む、これまでのコードです。

string choice, word, fname;
ifstream input;
int l, count = 0;

if(choice == "wc" || choice == "WC" || choice == "Wc")
{
    getline(cin, fname);
    input.open(fname.c_str());
    cout << fname << endl;
    if(input.fail())
    {
        cerr << " Error: failed to open the file: " << fname << endl;
        input.clear();
    }
    else
    {
        w = 0;
        while (input >> word)
           w++;
        input.close();
        count = w;
        cout << fname << " has a Word Count of: " << count << " words \n" << endl;
    }
}

c_str()ストリーム関数は、スペースの後に複数の文字列を読み取ることができないことを知っています。部分文字列を使用することを考えていましたが、続行する方法が完全にはわかりません。皆さん、私を助けてくれませんか?

4

1 に答える 1

0

これを試しましたか( http://www.cplusplus.com/forum/beginner/39687 ):

リテラル文字列では、\文字はエスケープ コードとして解釈され、他の方法では入力できない文字や印刷できない文字を埋め込むことができます。たとえば、リテラル文字列に改行を埋め込むには、リテラル文字列を入力しているときに Enter キーを押すことはできません。これは、エディターが実際に新しい行を開始することで応答するためです。したがって、代わりに " \n"、つまり " "と入力しThis is on the first line \n This is on the second lineます。' ' 文字を入力するには、\2 つのスラッシュを入力してエスケープする必要があります。最初のスラッシュはエスケープ文字で、2 番目のスラッシュは埋め込まれているスラッシュ文字です。

例:C:\\Program Files\\filename.txt

編集: ユーザーはファイル名だけでエスケープ文字を入力しません。次に、プログラムはスペースとパスのバックスラッシュを処理する必要があります。\nは改行を指定しますが、エスケープ文字とそれに続く n 文​​字で構成されています。

于 2012-09-25T05:03:49.313 に答える