gpt4 book ai didi

c++ - 如何在行中找到特定的字符串常量并复制以下内容

转载 作者:行者123 更新时间:2023-11-28 08:06:40 26 4
gpt4 key购买 nike

我正在创建一个有点弱/模糊的数据库(我的经验很少,请原谅我的代码困惑)。为此,每次我的控制台程序启动时我都会创建一个检查,检查是否已经创建了一个数据库(复制到 userlist.txt),如果没有创建一个新的,但是如果数据库存在,它应该全部复制到'vector users'(这是一个结构)我在类'userbase'中有,然后将包含所有用户信息。

我的 userstats 结构看起来像这样,

enum securityLevel {user, moderator, admin};
struct userstats
{
string ID;

string name;
string password;
securityLevel secLev;
};

我将在这段代码中包含文本文件中的所有这些信息,

    int main()
{
Userbase userbase; // Class to contain userinformation during runtime.

ifstream inFile;
inFile.open("userlist.txt");


if(inFile.good())
{
// ADD DATE OF MODIFICATION
cout << "USERLIST FOUND, READING USERS.\n";
userstats tempBuffer;
int userCount = -1;
int overCount = 0;

while(!inFile.eof())
{
string buffer;

getline(inFile, buffer);
if (buffer == "ID:")
{
userCount++;

if (userCount > overCount)
{
userbase.users.push_back(tempBuffer);
overCount++;

}
tempBuffer.ID = buffer;
cout << "ID"; // Just to see if works

}

else if (buffer == "name:")
{
cout << "name"; // Just to see if works
tempBuffer.name = buffer;

}
else if (buffer == "password:")
{
cout << "password"; // Just to see if works
tempBuffer.password = buffer;
}



}
if (userCount == 0)
{
userbase.users.push_back(tempBuffer);
}

inFile.close();
}
...

我尝试做的是阅读和分析文本文件的每一行。 userlist.txt 的一个示例可能是,

created: Sun Apr 15 22:19:44 2012

mod_date: Sun Apr 15 22:19:44 2012


ID:1d
name:admin
password:Admin1
security level:2

(我知道我还没有将“安全级别”读入程序)

编辑:也可以有更多用户简单地跟随列表中前一个用户的“安全级别:x”行。

现在,如果程序读取“ID:1d”行,它应该将其复制到结构中,最后我将把它全部放入 vector userbase.users[i] 中。但是,这似乎不起作用。它似乎没有捕获任何 if 语句。我以前让这种程序运行过,所以我很困惑我做错了什么。我真的需要一些帮助。非常欢迎对代码提出任何其他类型的批评。

问候,米克尔

最佳答案

if (buffer == ...) 永远不会是 true 因为行总是包含每行所包含的属性的值以及属性的类型。例如:

ID:1d

getline() 读取这个 buffer 时将包含 ID:1d 所以:

if (buffer == "ID:")

将为 false。使用 string.find()相反:

if (0 == buffer.find("ID:")) // Comparing to zero ensures that the line
{ // starts with "ID:".
// Avoid including the attribute type
// in the value.
tempBuffer.ID.assign(buffer.begin() + 3, buffer.end());
}

正如 jrok 评论的那样,用于读取文件的 while 不正确,因为在 getline() 之后没有立即进行检查。更改为:

string buffer;
while(getline(inFile, buffer))
{
...

关于c++ - 如何在行中找到特定的字符串常量并复制以下内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10166636/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com