처음으로 포스터입니다. 나는 아직도이 포럼 유형을 배우고 있습니다.C++ 파일에서 가져온 데이터에서 문자열 검색이 실패합니다.
내 코드는 "dataset.txt"파일에서 데이터를 가져 오도록 고안되었습니다. 그것은 그것을 읽고, 그것을 나의 배열로 섭취하고 명령에 표시 할 수 있습니다.
내가 dataset.txt에서 가져온 배열 내의 항목을 검색하려고하면 문제가 발생합니다. 내 코드는 거기에 있다는 것을 읽을 수없는 것 같아서 일치하는 결과를 표시하지 않습니다.
내 모든 데이터는 더미 데이터를 생성하는 데 사용 된 웹 사이트의 "더미 데이터"입니다. 이 출력 무엇
#include <cstdlib>
#include <iostream>
#include <string>
#include <algorithm>
#include <iomanip>
#include <fstream>
#include <stdio.h>
#include <vector>
using namespace std;
int main(int argc, char** argv) {
int ArraySize = 100; // sets array to 100 items
// initializes all possible arrays in the contact manager
string LastName[ArraySize] = "no data";
string FirstName[ArraySize] = "no data";
string Phone[ArraySize] = "no data";
string Email[ArraySize] = "no data";
string NullOne = "";
// Designed to pull data from the file "dataset.txt"
int i = 1;
std::ifstream myfile;
myfile.open("dataset.txt", ios::in);
if(!(myfile.is_open())) {
cout << "Error Opening File" << endl;
}
else {
cout << "File can be read. Will pull data." << endl;
}
while(myfile.good())
{
getline(myfile, NullOne);
getline(myfile, LastName[i]);
getline(myfile, FirstName[i]);
getline(myfile, Phone[i]);
getline(myfile, Email[i]);
i++;
}
cout << "Data pull complete!" << endl;
myfile.close();
// Designed to search all data for a specified name string
string NameSearch = "null";
int Matches = 0; // indicates that there is a match at all
cout << "Search for name" << endl;
cout << "Please input name : " << endl;
cout << LastName[4] << endl; // gives me a search parameter to use
cin >> NameSearch;
// search for the name in the Name array
for(int i=0; i<ArraySize; i++) {
cout << LastName[i] << endl;
if (LastName[i] == NameSearch) {
cout << "Name : " << LastName[i] << endl;
cout << "Phone : " << Phone[i] << endl << endl;
Matches++;
}
}
if (Matches == 0) {
cout << "No matches found" << endl << endl;
}
else {
cout << Matches << " matches found" << endl << endl;
}
return 0;
}
은 다음과 같습니다
Chaney
Penelope
(518) 996-0514
[email protected]
나는이 더러운 방법임을 알고 나는 그것을 청소하는 계획을 가지고 :
는File can be read. Will pull data.
Data pull complete!
Search for name
Please input name :
Chaney
Chaney
no data
Walton
Young
English
Chaney
Carpenter
Castaneda
Potter
Blackwell
Carter
Dyer
Yates
Bentley
Pitts
Dawson
Christensen
Goodwin
Boone
Dunn
Booth
Holman
no data (it displays this for about 40 more lines, I cut it out)
No matches found
이 찾을 것을 경기입니다 그러나 나는 그것을 작동시킬 수 없다.
모든 도움을 주시면 대단히 감사하겠습니다.
'std :: find'를 사용해야합니다. –
표시된 코드에 여러 가지 기본 버그가 있습니다. 'string LastName [ArraySize]'- 가변 길이 배열은 표준 C++가 아닙니다. while (myfile.good()) - [while (! myfile.eof())와 같은 근본적인 버그는 항상 버그입니다.] (https://stackoverflow.com/questions/5605125/why-is-iostreameof- inside-a-loop-condition-considered-wrong)에 대해 설명합니다. 'int i = 1;'- 첫 번째 루프는 인덱스 1에서 시작하는 배열을 채우기 시작하지만'for (int i = 0; ...')는 배열 인덱스 0에서 시작하여 1 대신 인덱스 배열을 시작합니다. 디버거를 사용하여 코드를 단계별로 실행하고 런타임에 모든 배열의 내용을 확인하십시오. –
가변 길이 배열을 허용하도록 설정을 끄고 프로그래머가 설정 (따라서 그것을 알고 C++이 표준이 아니라는 것을 정확히 알고있는 프로그래머 만이 그것을 사용할 것입니다.) 포스터가 너무 많습니다. 대부분 C++의 초보자 들이며,'string LastName [ArraySize]', 그들이 유효한 C++ 코드를 작성하고 있다고 믿고 있습니다. 대신에 무엇을 사용할 지에 관해서는'std :: vector'을 사용하십시오. –
PaulMcKenzie