Как использовать файл для заполнения массива и сравнения его с пользовательским вводом C++

Я написал код для заполнения массива из файла а затем используйте этот массив, чтобы сравнить его с пользовательским вводом Программа должна попросить пользователя ввести имя или часть имени для поиска в множество вот код:

#include <iostream>
#include <string>
#include <iomanip>
#include <fstream>
using namespace std;
int main()
{
    bool found = false;
    const int arraySize = 35;
    const int length = 100;
    char contacts[arraySize][length];
    int count = 0;              // Loop counter variable
    ifstream inputFile;         // Input file stream object

    inputFile.open("input.txt"); // Open the file.

                                   // Read the numbers from the file into the array.
                                   // After this loop executes, the count variable will hold
                                   // the number of values that were stored in the array.
    while (count < arraySize && inputFile >> contacts[count])
        count++;
    // Close the file.
    inputFile.close();


    char search[length];                        
    char *fileContact = nullptr;        
    int index;  
    cout << "To search for your contact's number \nplease enter a name or partial name of the person.\n";
    cin.getline(search, length);                            
    for (index = 0; index < arraySize; index++)
    {
        fileContact = strstr(contacts[index], search);
        if (fileContact != nullptr)
        {
            cout << contacts[index] << endl;        
            found = true;
        }
    }
    if (!found) cout << "Sorry, No matches were found!";
    return 0;
}

и имена в файле

«Алехандра Крус, 555–1223»

«Джо Луни, 555-0097»

"Джери Палмер, 555-8787"

"Ли Чен, 555-1212"

"Холли Гэддис, 555-8878"

"Сэм Уиггинс, 555-0998"

"Боб Кейн, 555-8712"

"Тим Хейнс, 555-7676"

"Уоррен Гэддис, 555-9037"

"Жан Джеймс, 555-4939"

"Рон Палмер, 555-2783"

так что код работает, но проблема в когда я пишу Алехандру например вывод: «Алехандра на выходе должно отображаться полное имя и номер: «Алехандра Крус, 555–1223»

Кто-нибудь знает, как это исправить? Благодарность!!

Вы что-нибудь сделали, чтобы увидеть, что на самом деле было помещено в ваш массив? Почему нет?

Scott Hunter 25.04.2018 21:33

Извлеките минимальный воспроизводимый пример. В частности, исключите ввод из вашего примера кода.

Ulrich Eckhardt 25.04.2018 21:34
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
2
40
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Когда вы используете

inputFile >> contacts[count]
  1. Начальные пробельные символы отбрасываются.
  2. Непробельные символы считываются в contants[count].
  3. Чтение останавливается, когда встречается пробельный символ.

Это объясняет ваш результат.

Вместо этого вам нужно использовать istream::get.

while (count < arraySize && inputFile.get(contacts[count], length) )
    count++;

В ответ на комментарий OP

Выше должны быть все строки файла до количества строк arraySize.

Вы можете добавить некоторые отладочные данные для устранения проблемы.

while (count < arraySize && inputFile.get(contacts[count], length) )
{
    std::cout << "Read " << count+1 << "-th line.\n" << "\t" << contants[count] << "\n";
    count++;
}

это устранило проблему !! теперь он показывает полное имя и номер, если я ввел имя, однако есть ли способ показать контакт, если я ввел фамилию? например, если контакты: «Холли Гэддис, 555-8878», «Уоррен Гэддис, 555-9037», могу ли я ввести фамилию, которая является Гэддис, и показать оба контакта?

addicted_programmer 25.04.2018 21:44

@ fluy619, конечно можно. Он должен работать с вашим опубликованным кодом.

R Sahu 25.04.2018 21:46

Я попытался ввести Gaddis и показать оба контакта, которые связаны с этим именем, но вывод: «Извините, совпадений не найдено!»

addicted_programmer 25.04.2018 21:48

Похоже, что в массиве хранится только первое имя, что означает, что другие имена не будут отображаться, если пользователь введет свое имя во вход

addicted_programmer 25.04.2018 21:51

@ fluy619, поскольку вы приняли ответ, справедливо ли предположить, что на ваши вопросы / сомнения были даны ответы?

R Sahu 25.04.2018 22:04

да, сэр, мне нужно прочитать только до конца файла, ваш метод считывает только первую строку файла в массив, это моя единственная забота сейчас

addicted_programmer 25.04.2018 22:07

Другие вопросы по теме