Мне нужно написать программу, которая находит анаграммы слов. Когда программа запускается, она просит пользователя ввести слова в «словарь», который позже будет искать анаграммы слов, которые снова вводит пользователь.
Я сохранил все слова словаря в векторе с именем 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::» и почему эти две строки кода создают ошибки?
Большое спасибо
declaration vs definition in C and C++
, я бы посоветовал погуглить выделенный термин и пройти по нескольким ссылкам. 05.05.2014