此向量有向量问题无法正常工作
this vector has vector probelem is not working
问题是它打印了全名而不是关于此人的其余部分。
有人可以指导我吗?
非常感谢您的帮助!
auto itr = find(my_vec.begin(), my_vec.end(), search );
if(itr != my_vec.end())
{
std::cout << "Match found " << search << std::endl;
std::cout << "\nFull name: " << search << std::endl;
} else {
std::cout << "Match not found "<< std::endl;
}
如果每个条目包含 6 行。然后你可以打印从你找到的行开始的所有行:
auto itr = find(my_vec.begin(), my_vec.end(), search );
if(itr != my_vec.end())
{
std::cout << "Match found " << std::endl;
// print the next 6 lines
for(int remaining = 6;remaining > 0 && itr!=my_vec.end(); itr++,remaining--) {
std::cout << *itr << std::endl;
}
} else {
std::cout << "Match not found "<< std::endl;
}
您的代码存在一些样式问题:
- 无需显式初始化字符串,它们默认为空(参见here)。
- 保持风格一致。例如,始终在函数签名所在的同一行或下一行开始括号。
- 无需在函数末尾显式关闭文件,这是在 object 超出范围时完成的(参见
(destructor)
here)。
- 无需包含
<map>
和 <iomanip>
headers。
- 不要保留未使用的变量。
- 为您的变量命名。
- 当应用程序正常运行时,不要 return 向 OS 发送错误代码。找不到名字不是错误,是吗?
您的文件中每个联系人似乎有 6 个条目,因此您只需再打印 5 行即可。您不需要将线条存储在向量中,只需在进行时解析并打印它们。这是一个例子:
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <fstream>
void findContact(std::string fullName, std::string contactListPath) {
std::ifstream inFile{contactListPath};
if (!inFile) {
std::cerr << "File could not be open!" << std::endl;
return;
}
std::string line;
while (std::getline(inFile, line)) {
if (line == fullName) {
std::cout << "Match found: \n";
std::cout << "\nFull name: " << fullName;
std::cout << "\nAddress: " << (std::getline(inFile, line), line);
std::cout << "\nE-mail: " << (std::getline(inFile, line), line);
std::cout << "\nPhone: " << (std::getline(inFile, line), line);
std::cout << "\nBirthday: " << (std::getline(inFile, line), line);
std::cout << "\nNote: " << (std::getline(inFile, line), line) << std::endl;
return;
}
}
std::cout << "Match not found " << std::endl;
}
int main() {
std::string fullName;
std::string contactListPath;
std::cout << "Enter full name to search: ";
std::getline(std::cin, fullName);
std::cout << "Enter path to contact list: ";
std::getline(std::cin, contactListPath);
findContact(fullName, contactListPath);
return 0;
}
问题是它打印了全名而不是关于此人的其余部分。 有人可以指导我吗? 非常感谢您的帮助!
auto itr = find(my_vec.begin(), my_vec.end(), search );
if(itr != my_vec.end())
{
std::cout << "Match found " << search << std::endl;
std::cout << "\nFull name: " << search << std::endl;
} else {
std::cout << "Match not found "<< std::endl;
}
如果每个条目包含 6 行。然后你可以打印从你找到的行开始的所有行:
auto itr = find(my_vec.begin(), my_vec.end(), search );
if(itr != my_vec.end())
{
std::cout << "Match found " << std::endl;
// print the next 6 lines
for(int remaining = 6;remaining > 0 && itr!=my_vec.end(); itr++,remaining--) {
std::cout << *itr << std::endl;
}
} else {
std::cout << "Match not found "<< std::endl;
}
您的代码存在一些样式问题:
- 无需显式初始化字符串,它们默认为空(参见here)。
- 保持风格一致。例如,始终在函数签名所在的同一行或下一行开始括号。
- 无需在函数末尾显式关闭文件,这是在 object 超出范围时完成的(参见
(destructor)
here)。 - 无需包含
<map>
和<iomanip>
headers。 - 不要保留未使用的变量。
- 为您的变量命名。
- 当应用程序正常运行时,不要 return 向 OS 发送错误代码。找不到名字不是错误,是吗?
您的文件中每个联系人似乎有 6 个条目,因此您只需再打印 5 行即可。您不需要将线条存储在向量中,只需在进行时解析并打印它们。这是一个例子:
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <fstream>
void findContact(std::string fullName, std::string contactListPath) {
std::ifstream inFile{contactListPath};
if (!inFile) {
std::cerr << "File could not be open!" << std::endl;
return;
}
std::string line;
while (std::getline(inFile, line)) {
if (line == fullName) {
std::cout << "Match found: \n";
std::cout << "\nFull name: " << fullName;
std::cout << "\nAddress: " << (std::getline(inFile, line), line);
std::cout << "\nE-mail: " << (std::getline(inFile, line), line);
std::cout << "\nPhone: " << (std::getline(inFile, line), line);
std::cout << "\nBirthday: " << (std::getline(inFile, line), line);
std::cout << "\nNote: " << (std::getline(inFile, line), line) << std::endl;
return;
}
}
std::cout << "Match not found " << std::endl;
}
int main() {
std::string fullName;
std::string contactListPath;
std::cout << "Enter full name to search: ";
std::getline(std::cin, fullName);
std::cout << "Enter path to contact list: ";
std::getline(std::cin, contactListPath);
findContact(fullName, contactListPath);
return 0;
}