C ++在一行字符串中检索数值

时间:2018-07-17 15:02:21

标签: c++ fstream

这是我管理读取的txt文件的内容。

X-axis=0-9
y-axis=0-9
location.txt
temp.txt

我不确定是否可行,但是在阅读了该txt文件的内容之后,我试图将x和y轴范围仅存储到2个变量中,以便我可以将其用于以后的功能。有什么建议吗?我需要使用向量吗?这是读取文件的代码。

string configName;
ifstream inFile;

do {

    cout << "Please enter config filename: ";
    cin >> configName;

    inFile.open(configName);

    if (inFile.fail()){

        cerr << "Error finding file, please re-enter again." << endl;
        }
    } while (inFile.fail());

string content;
string tempStr;
while (getline(inFile, content)){

    if (content[0] && content[1] == '/') continue;
    cout << endl << content << endl;

3 个答案:

答案 0 :(得分:0)

取决于文件的样式,如果始终确保样式保持不变,则您可以逐个字符读取文件并实现模式识别之类的

if (tempstr == "y-axis=")

,然后使用类似的功能

将适当的子字符串转换为整数
std::stoi

并存储

答案 1 :(得分:0)

我将假设您已经在某个位置的单个字符串中包含了.txt文件的全部内容。在这种情况下,您的下一个任务应该是分割字符串。就个人而言,是的,我建议使用向量。假设您想用换行符分隔该字符串。像这样的功能:

#include <string>
#include <vector> 

std::vector<std::string> split(std::string str)
{
    std::vector<std::string> ret;
    int cur_pos = 0;
    int next_delim = str.find("\n");

    while (next_delim != -1) {
        ret.push_back(str.substr(cur_pos, next_delim - cur_pos));
        cur_pos = next_delim + 1;
        next_delim = str.find("\n", cur_pos);
    }

    return ret;
}

将用换行符分隔输入字符串。从那里,您可以开始解析该向量中的字符串。您要查看的关键功能是std::string的{​​{1}}和substr()方法。快速的Google搜索应该可以带您找到相关的文档,但是在这里,以防万一:

http://www.cplusplus.com/reference/string/string/substr/ http://www.cplusplus.com/reference/string/string/find/

现在,假设您在find()中有字符串"X-axis=0-9"。然后,您可以为vec[0]做一个find,然后获取该索引之前和之后的子字符串。之前的内容将是“ X轴”,之后的内容将是“ 0-9”。这将使您知道“ 0-9”应归于任何“ X轴”。从那里,我认为您可以弄清楚,但是希望这对您从哪里开始有个好主意!

答案 2 :(得分:0)

  1. std::string::find()可用于搜索字符串中的字符;
  2. std::string::substr()可用于将字符串的一部分提取到另一个新的子字符串中;
  3. std::atoi()可用于将字符串转换为整数。

然后,这三个函数将使您可以对content进行一些处理,特别是:(1)搜索content以查找第一个值(=的开始/停止定界符(-和第二个值(-string::npos),(2)将它们提取为临时子字符串,然后(3)将子字符串转换为int。你想要的是什么。