2013-03-14 73 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