Nano Hash - криптовалюты, майнинг, программирование

Программа поиска анаграмм на C++

Мне нужно написать программу, которая находит анаграммы слов. Когда программа запускается, она просит пользователя ввести слова в «словарь», который позже будет искать анаграммы слов, которые снова вводит пользователь.

Я сохранил все слова словаря в векторе с именем oldDict. Затем символы в каждом слове располагаются в алфавитном порядке, а новые слова, отсортированные по символам, сохраняются в векторе с именем newDict, чтобы сохранить исходные слова в oldDict.

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

Ниже мой код:

ifndef ANAGRAM_H
#define ANAGRAM_H
#include <iostream>
#include <vector>
#include <string>
using namespace std;

vector <string> oldDict;
vector <string> newDict;
int dictSize = 0;

void readDict(void){    // Allows the user to input all the words they would like to     have in the anagram dictionary.
    cout<< "Please enter the number of dictionary entries you wish to create\n";
    cin >> dictSize;
    string word = "";
    cout << "Please enter the dictionary entries, 1 by 1, pushing <enter> after each entry.\n";
    for(int i = 0; i <dictSize; i++){
        cin >> word;
        oldDict.push_back(word);
    }
    newDict = oldDict;
}   

void sortChars(void){   //sorts the letters in each word of the 'dictionary' so that the     letters are in alphabetical order.
    for(int i = 0; i < dictSize; i++){
        std::sort(newDict[i].begin(), newDict[i].end());    
    }
}

void getWords(void){
    int num = 0;
    cout << "Please enter the number of words for which you would like to find anagrams     of:\n";
    cin >> num;
    string word = "";
    for(int i = 0; i < num; i ++){
        cout << "Please enter a word:\n";
        cin>>word;
        std::sort(word.begin(), word.end());    
        for(int i = 0; i < dictSize; i++){
            string word2 = newDict[i];
            bool isAn = isAnagram(word, word2);
            if(isAn == true){
                cout << oldDict[i];
            } else{
            }
        }
    }
}

bool isAnagram(string word1, string word2){

    if(word1.compare(word2) ==0){
        return true;
    } else {
        return false;   
    }
}

void menu(void){
    readDict();
    sortChars();
    getWords();
}
#endif

Процесс начинается в функции order() внизу кода.

При попытке скомпилировать код я получаю следующие ошибки:

In file included from main.cpp:3:0:
./anagram.h: In function ‘void sortChars()’:
./anagram.h:25:3: error: ‘sort’ is not a member of ‘std’
   std::sort(newDict[i].begin(), newDict[i].end()); 
   ^
./anagram.h: In function ‘void getWords()’:
./anagram.h:37:4: error: ‘sort’ is not a member of ‘std’
    std::sort(word.begin(), word.end()); 
    ^
./anagram.h:40:38: error: ‘isAnagram’ was not declared in this scope
     bool isAn = isAnagram(word, word2);

Может ли кто-нибудь помочь мне решить эти ошибки? Я действительно не понимаю, когда «isAnagram» выдает ошибку, а также, может ли кто-нибудь объяснить, что делает «std::» и почему эти две строки кода создают ошибки?

Большое спасибо


  • #include <algorithm> и объявленные функции перед использованием 04.05.2014
  • Проблема на основе опечатки: вряд ли будет полезна кому-то еще. 04.05.2014

Ответы:


1

‘sort’ is not a member of ‘std’ Добавить #include <algorithm>

‘isAnagram’ was not declared in this scope Объявите функцию перед ее первым использованием.

Более того, реализация isAnagram выглядит неправильно. Вы не можете просто сравнивать строки. Вы должны отсортировать строки перед их сравнением.

bool isAnagram(string word1, string word2){
    std::sort(word1.begin(), word1.end()); // added
    std::sort(word2.begin(), word2.end()); // added
    if(word1.compare(word2) ==0){
        return true;
    } else {
        return false;   
    }
}
04.05.2014
  • Спасибо за ответ. Мне трудно понять, что вы имеете в виду, когда говорите «объявить функцию перед ее первым использованием»? Это неправильно, как я объявил логическую переменную isAn и сразу же присвоил ей логическое значение, которое будет возвращено функцией isAnagram? 04.05.2014
  • Да ладно, я все время забываю, что порядок функций имеет значение в C++. Большое спасибо за всю вашу помощь :) 04.05.2014
  • Если вы хотите понять declaration vs definition in C and C++, я бы посоветовал погуглить выделенный термин и пройти по нескольким ссылкам. 05.05.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..