gpt4 book ai didi

c++ - 使用 C++ 根据行中的第一个字符串查找行(仅一个)

转载 作者:行者123 更新时间:2023-11-30 05:34:36 25 4
gpt4 key购买 nike

目标:通过搜索电子邮件地址在数据文件中找到要调整的正确行

问题:当我根据下面的当前代码使用 string::find 时,我可以找到该行,但是当我搜索 rick@fakedomain.tld 时,我得到了两次点击, frederick@rick@ 行。由于电子邮件地址是第一个字段,我不能包含一个前导空格(分隔符)来解决这个问题。

示例输入数据文件(称为数据文件):

alan@fakedomain.tld q7gPGAdb0zGKHlQd./ Alan Smith
frederick@fakedomain.tld cyHSYctfJpOq7gPGAd Frederick Smith
david@fakedomain.tld nz0hz1uevogQgNxqQA David Smith
rick@fakedomain.tld 4bExd5J3tU7Pi9o/My Rick Smith
john@fakedomain.tld q7gPGAdb0zGKHlQd./0 John Smith

当前的 c++ 代码:

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main(int argc, char *argv[]) {
// Are there the right number of command line arguments
if (argc < 2) { // expecting 2, the command and email address
cout << "test [emailaddress]" << endl;
return 1;
}
if (argc > 2) {
cout << "test: to many arguments" << endl;
return 1;
}

// put the command line arguments into string variables
string cmd = argv[0];
string email = argv[1];

// display the command line for testing - remove secton for production
string space = " ";
string cmdline = cmd + space + email + space + oldPW + space + oldPW;
cout << cmdline << endl;

// Open the files
ifstream filein("datafile"); //File to read from
if(!filein)
{
cout << "Error opening file!" << endl;
return 1;
}

string strLine;
while(getline(filein, strLine))
{
// the test to see if this is the line to work with
size_t found = strLine.find(email);
if (found != string::npos) {
// this is the string so add code here to work with it
cout << strLine << endl;
}
}
return 0;
}

问题:如何只返回与针完全匹配的线?

如果要求不高,希望得到一个能教会我的答案,而不仅仅是一些未注释的有效代码,但如果我能得到的话,我会采用后者。

可选:如果有更好的方法来处理您看到的代码的其他部分,请随时在您的回答或评论中提出建议。总是热衷于学习更好的方法。

期望的输出

./test rick@fakedomain.tld
alan@fakedomain.tld q7gPGAdb0zGKHlQd./ Alan Smith
- - no match
frederick@fakedomain.tld cyHSYctfJpOq7gPGAd Frederick Smith
- - no match
david@fakedomain.tld nz0hz1uevogQgNxqQA David Smith
- - no match
rick@fakedomain.tld 4bExd5J3tU7Pi9o/My Rick Smith
|=|=| MATCH
john@fakedomain.tld q7gPGAdb0zGKHlQd./0 John Smith
- - no match

我得到的输出

./test rick@fakedomain.tld
alan@fakedomain.tld q7gPGAdb0zGKHlQd./ Alan Smith
- - no match
frederick@fakedomain.tld cyHSYctfJpOq7gPGAd Frederick Smith
|=|=| MATCH
david@fakedomain.tld nz0hz1uevogQgNxqQA David Smith
- - no match
rick@fakedomain.tld 4bExd5J3tU7Pi9o/My Rick Smith
|=|=| MATCH
john@fakedomain.tld q7gPGAdb0zGKHlQd./0 John Smith
- - no match

注意:使用 g++ test.c -o test 没有编译错误或警告

最佳答案

如果您想确保找到的电子邮件位于字符串的开头,那么只需检查以确保找到的电子邮件为零。

if (found == 0)
cout << strLine << endl;

另一种选择是使用 std::string::substr在文件的行上并与 operator == 进行直接比较

if (email == strLine.substr(0, email.size()))
cout << strLine << endl;

关于c++ - 使用 C++ 根据行中的第一个字符串查找行(仅一个),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34164686/

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