0
4

5 に答える 5

3

近位では、最後の getline() で実際に読み込まれた部分だけでなく、バ​​ッファー全体をスキャンしているためです。

しかし、より基本的なレベルでは、文字列ではなく文字配列を使用しているためです。C++ 文字列にはさまざまな理由がありますが、大きな問題の 1 つは、固定サイズのバッファーに関連する多くのバグを回避することです。

于 2013-09-04T15:24:28.803 に答える
0

あなたの行:

for(int i = 0; i < 100; i++)

次のようにする必要があります。

for(int i = k+1; i < 100; i++)
于 2013-09-04T15:22:22.783 に答える
0

これは実際には必要以上に複雑です。次のように考えることができます。

#include <iostream>
#include <string>
#include <fstream>

int main()
{   
    std::string inputFilename;
    std::cout << "Enter Filename:";
    std::cin >> inputFilename;

    std::ifstream inputFile(inputFilename);
    if(inputFile)
    {
        std::string line;
        while(std::getline(inputFile, line))
        {
            if(line.find('#') != std::string::npos)
            {
                size_t startPos = line.find_first_of("<\"");
                size_t endPos = line.find_last_of(">\"");
                if(startPos != std::string::npos && endPos != std::string::npos)
                {
                    //advance start to after the < or "
                    ++startPos;
                    //sanity check just in case the line was ill formed
                    if(startPos < endPos)
                    {
                        std::cout << line.substr(startPos, endPos - startPos) << std::endl;
                    }
                }
            }
        }
    }
    else
    {
        std::cout << "File '" << inputFilename << "' does not exist." <<  std::endl;
    }
    return 0;
}
于 2013-09-04T15:46:55.753 に答える