解析未知数量的行并将其分配给变量

时间:2016-03-19 00:45:03

标签: c++

所以,我想创建一个简单的程序,但是因为我的c ++课程已经过去2年了,我不清楚地记住了一些事情。程序用于快速切换蒸汽帐户。我只为我和我的朋友(我们有很多acc)而且只是为了训练。它必须从文件解析未知数量的蒸汽帐户(语法 - login = xxxx,pass = yyyy)并将它们分配给变量。如何为每个登录名和密码创建变量?

我试过这样的

string line;
ifstream accfile("steamaccountswitcher");

if (!accfile)
{
    ofstream newaccfile("steamaccountswitcher");    //Create a new file, if doesnt exist
    newaccfile.close();
}

int lcounter = 1, pos = 0;
map<string, int> login, pass;

while (getline(accfile, line))  //Getting lines
{
    pos = line.find(",");   //Locating sparator

    for (int i = 0; i < pos; i++)   //Setting login var
    {
        login["lcounter"] += line[i];
    }

    for (int i = pos; i < sizeof(line); i++)    //Setting pass var
    {
        pass["lcounter"] += line[i];
    }

    lcounter++;
}

但它不起作用。也许这是一个非常愚蠢的错误,但我没有看到它。就目前而言,我需要登录var为“login = xxxxx”并传递var - “pass = yyyyy”

steamaccountswitcher文件示例:

login=1234,pass=4567
login=1111,pass=2222
login=2222,pass=2222

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

  • pos,的位置,因此您必须以pos + 1开头才能获得pass=yyyyy,而不是,pass=yyyyy
  • sizeof(line)不是获取字符串长度的好方法。您应该使用line.size()来实现此目的。
  • 在这种情况下,使用std::string::substr()会更好。
  • "lcounter"lcounter不同,您的程序将连接一个数据中所有行的数据。
  • int无法保持字符串。
  • 您应该使用pos的正确类型,它会存储std::string::find()的返回值。

试试这个:

int lcounter = 1;
string::size_type pos = 0;
map<int, string> login, pass;

while (getline(accfile, line))   //Getting lines
{
    pos = line.find(",");   //Locating sparator
    if (pos == string::npos) continue;   // For safety

    login[lcounter] = line.substr(0, pos);   //Setting login var

    pass[lcounter] = line.substr(pos + 1);   //Setting pass var

    lcounter++;
}