获取关键字值C ++

时间:2018-02-01 17:56:06

标签: c++ parsing keyword

我正在使用C ++来读取文件并进行一些计算。我需要保存关键字的值,但我遇到了问题。我设法逐行读取文件,并在字符串中找到关键字。但如果我用cout检查它,如果我将它分配给变量并用cout打印它,我会得到不同的结果。

该文件具有以下格式 vtk DataFile Version 2.0

#Generated by lpp.py
ASCII
DATASET POLYDATA
POINTS 3 float

我使用的代码是:

#include <string.h>
#include <string> 
#include <fstream>
#include <iostream>
using namespace std;

int main(){
    int nPart = 0;
    string fileName = "liggghts_simPart";
    string extension = ".vtk";
    string keyword = "POINTS";
    string currentFile;
    string line;
    int numLines = 0;   // counter for line reading
    currentFile = "liggghts_simPart0500.vtk";

    //Open the curren file
    ifstream fileToOpen;
    fileToOpen.open(currentFile);

    for (int i = 0; numLines <= 4 &&  getline(fileToOpen, line); ++numLines){

    }

    cout << line << endl;
    size_t found = line.find(keyword);
    nPart = line[ found + keyword.size() + 1 ];     // get key value
    cout << line[ found + keyword.size() + 1 ] << endl;
    cout << nPart << endl;
}

我得到的输出是

POINTS 3 float
3
51

那么为什么我会得到不同的输出?我应该在两种情况下得到关键字的值,即3。

如果有人能帮助我,那就太好了!

谢谢, 莫罗

1 个答案:

答案 0 :(得分:1)

这是因为您在没有正确转换值的情况下转向int。在ASCII中,符号"3"的数值为51,这是您获得的输出。

您应该使用std::stoi

转换为整数
nPart = std::stoi(line.substr(found + keyword.size() + 1, 1));

但是,如评论中所述,用于定位值的方法仅适用于单个数字。如果您可能遇到大于9的值,您应该找到一种更好的方法来标记字符串(例如,通过拆分" ")。