首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于iterator指针的有关问题···

2012-07-31 
关于iterator指针的问题废话不多说,上代码:主函数:C/C++ codevoid main(){vectorstring inputvectorst

关于iterator指针的问题···
废话不多说,上代码:
主函数:

C/C++ code
void main(){    vector<string> input;    vector<string>::iterator iter;    ifstream myf;    string getfile;    cout<<"请输入要分析的文本文件"<<endl;    cin>>getfile;    ifstream infile(getfile.c_str());    if (!infile){        cout<<"无法正常打开文件!请重新输入!"<<endl;    }      string word;    vector<string> word_peaces;    while ( infile >> word )    {        word_peaces.clear();        word_peaces=breaks(word);        for (vector<string>::iterator vsi=word_peaces.begin(); vsi!=word_peaces.end(); ++vsi)        {                string getword = *vsi;                           int code=transform(getword);            if (code==-1)                 cout << "[ -1 ,  error ]" << endl;            else                 cout << "[ " << code << " ,  " << getword << "  ]" <<endl;        }    }}

其中break函数如下:
C/C++ code
vector<string> breaks(string s) // 按特殊符号分割    {        vector<string> tmp(0);        string::iterator i=s.begin(),last=s.begin();    // last : 上一次分割后的位置        int sym_length; // 特殊符号的序号        while (i!=s.end())        {            i=find_symbol(last, s.end(), sym_length);            if (i!=s.end())  // 找到一个符号            {                if (i!=last) tmp.push_back(string(last, i));                    tmp.push_back(string(i, i+sym_length) );                last=i+sym_length;            }            else            {                tmp.push_back(string(last, s.end()) );             }        }        return tmp;    }

另外,我是在写一个简单的CMM词法分析器,我的程序编译的时候没问题,就是在运行的时候,出现指针错误,debug后发现,主函数中红色代码的vsi指针总是显示“错误的指针”我一直找不出原因··希望各位大牛拉拉小弟··谢谢啦

[解决办法]
i=find_symbol(last, s.end(), sym_length);
你这个find函数如果说没找到该特殊符号返回的是什么值呢?
[解决办法]
tmp.push_back(string(i, i+sym_length) );
确定i+sym_length不会越界么

热点排行