所以,我想创建一个简单的程序,但是因为我的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
感谢您的帮助。
答案 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++;
}