2013-03-14 75 views
1

我正在從一個文件讀取string C++程序工作。在string的末尾有一些數字。我的任務是顯示字符串末尾的nth數字。字符串在c + +運行時錯誤

這是我的代碼。該程序接受文件的路徑:

#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 
+0

什麼是操作系統? – 2013-03-14 16:51:27

+1

什麼是錯誤? – 2013-03-14 16:51:52

+1

首先,您應該在調試器中運行您的程序。這會告訴你_哪裏錯誤是。它也可以讓你檢查變量,所以你可能會發現_what_會導致錯誤。 – 2013-03-14 16:52:09

回答

1

請在調試器中運行您的程序,瞭解它正在做的特定行爲。看看它與你所期望的不同之處。

gdb可能是最簡單的,你可以通過谷歌搜索「gdb cheatsheet」左右開始。請記住用-g進行編譯。

+0

該程序是羚牛字符串的下一行也是,但當行緩衝區的editint正在發生第二行其givng錯誤我dnt知道如何解決:( – 2013-03-14 18:37:32

0

你應該申報pos作爲size_t而不是int因爲std::string::find()回報size_t

另外,當std::string::find()什麼都不匹配時,它將返回string::npos而不是-1。因此,您應該比較posstring::npos而不是整數文字-1

+0

該程序是羚牛字符串的下一行也當editint在線緩衝區正在發生第二行其givng錯誤我dnt知道如何解決:( – 2013-03-14 18:37:52