Как сохранить одно слово в векторе?(C ++) - PullRequest
0 голосов
/ 12 декабря 2018

Идея: Я пытаюсь создать программу, которая ищет введенное пользователем слово в текстовом файле.Размер слова не указан.Я хочу найти способ динамического хранения слова пользователя, чтобы иметь возможность сравнить его с другими словами из файла.

Вся программа огромна, поэтому я прикрепляю только часть, относящуюся к моим запросам.

#include <stdio.h>
#include <string.h>
#include <iostream> 
#include <cstdlib> 
#include <fstream> 
#include <cstdlib> 
#include <vector> 
#include <string>

    void vectorfill(vector<char>& newword) //filling char vector
    {
        char input;
        scanf_s("%c", &input);
        while (input != -1)
        {
            newword.push_back(input);
            scanf_s("%c", &input);
        }
    }

int main (void)
{
    vector<char> word; 
    printf("Enter a word: (-1 to finish)");
    vectorfill(word);    
}

Вопросы:

1) Является ли char vector лучшей идеей в этом случае?

2) (Если у нас все хорошо с вектором символов) Как заставить компилятор понять, что пользователь закончил писать свое слово?Можем ли мы попросить его поставить (-1) в конце?Есть ли лучший способ отметить конец ввода?

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

1> Нет. Используйте std::string

2> Да.Используйте пробел.

Пример:

#include <iostream> 
#include <string>

int main ()
{
    std::string word; 
    std::cout << "Enter a word" << std::endl;
    std::cin >> word;
    // do something with word. For example, 
    std::cout << "You entered" << word << '\n';
}

Как только пользователь введет хотя бы один номер, букву или другой не- символ пробела , за которым следует пробелсимвол слово будет захвачено в word.Если у вас есть особые требования, например, это слово может содержать только буквы (без цифр, колокольчиков, художественных символов ASCII и т. Д.), Простой цикл с isalpha может разобрать это в несколько строк кода., но не меньше, чем std::find_if и isalpha.

0 голосов
/ 12 декабря 2018

Если содержимое поиска находится в текстовом файле.Использование std::vector<std::string> может быть лучше.Вы можете использовать символ разделения для разделения слов.

Если содержимое с клавиатуры пользователя.Вы также можете использовать std::string, чтобы сохранить каждое набранное слово и сохранить его в std::vector<std::string>.Просто так:

std::string s;
std::vector<std::string> vec;
std::cout << "Please enter somestring" << std::endl;
while (cin >> s)
{
    vec.push_back(s);
    cout << "You have entered : " << s << endl;
}
...