1

私はstringファイルからを読み取るC++プログラムに取り組んでいます。の終わりにstringいくつかの数字があります。私の仕事はnth、文字列の末尾から数字を表示することです。

これが私のコードです。プログラムはファイルへのパスを受け入れます。

#include<iostream>
#include<fstream>
#include<string>
#include<stdlib.h>

using namespace std;

int main(int argc,char** argv)
{
    ifstream file;
    int num,i=0,pos;    
    std::string lineBuffer;
    file.open(argv[1],ios::in) ;  
    while (!file.eof()) 
      {
         getline(file, lineBuffer);        
         if (lineBuffer.length() == 0)
              continue; //ignore all empty lines
         else 
           {
             pos=0;            
            std::string str1("");
            std::string str2("");
            std::string final("");
            std::string number("");
            std::string output("");
                while(pos!=(-1))
                {
                  pos=lineBuffer.find(" ");                               
                  str2=lineBuffer.substr(0,1);
                  lineBuffer=lineBuffer.substr(pos+1);
                  final+=str2;
                  i++;
                }
                number=final.substr((i-1));
                num=atoi(number.c_str());
                output=final.substr(i-(num+1),1);
                cout<<output;                            
           }    
      }
      file.close();
       return 0;
}

私のプログラムは、ファイルの最初の行に正しい出力を提供します。しかし、その後、実行時エラーが発生します。なぜこれが起こっているのか分かりません。

ターミナルに送信するファイルには、次のものが含まれています。

a b c d 4
b e f g 2
4

2 に答える 2

1

プログラムが実行している特定の動作を理解するには、デバッガでプログラムを実行してください。期待していたものとどこが異なっているかを確認してください。

gdb最も簡単な場合があり、「gdbチートシート」などをグーグルで始めることができます。でコンパイルすることを忘れないでください-g

于 2013-03-14T16:56:03.823 に答える
0

since returnsの代わりにposasを宣言する必要があります。size_tintstd::string::find()size_t

また、std::string::find()何にもマッチしない場合はstring::npos代わりに返します-1。したがって、整数リテラルの代わりに比較posする必要があります。string::npos-1

于 2013-03-14T17:01:47.377 に答える