Skeleton
This commit is contained in:
commit
651461e1e9
12
.gitignore
vendored
Executable file
12
.gitignore
vendored
Executable file
@ -0,0 +1,12 @@
|
|||||||
|
*~
|
||||||
|
|
||||||
|
.DS_Store
|
||||||
|
|
||||||
|
*.pro.user.*
|
||||||
|
*.pro.user
|
||||||
|
|
||||||
|
build-*/
|
||||||
|
*.app
|
||||||
|
*.exe
|
||||||
|
|
||||||
|
build
|
44
WordChain.pro
Executable file
44
WordChain.pro
Executable file
@ -0,0 +1,44 @@
|
|||||||
|
TEMPLATE = app
|
||||||
|
|
||||||
|
CONFIG += console
|
||||||
|
CONFIG += no_include_pwd
|
||||||
|
|
||||||
|
SOURCES = $$PWD/src/*.cpp
|
||||||
|
#SOURCES += $$PWD/lib/*.cpp
|
||||||
|
HEADERS = $$PWD/src/*.h
|
||||||
|
HEADERS += $$PWD/lib/*.h
|
||||||
|
|
||||||
|
QMAKE_CXXFLAGS += -std=c++11
|
||||||
|
|
||||||
|
INCLUDEPATH += $$PWD/lib/
|
||||||
|
|
||||||
|
# Copies the given files to the destination directory
|
||||||
|
defineTest(copyToDestdir) {
|
||||||
|
files = $$1
|
||||||
|
|
||||||
|
for(FILE, files) {
|
||||||
|
DDIR = $$OUT_PWD
|
||||||
|
|
||||||
|
# Replace slashes in paths with backslashes for Windows
|
||||||
|
win32:FILE ~= s,/,\\,g
|
||||||
|
win32:DDIR ~= s,/,\\,g
|
||||||
|
|
||||||
|
!win32 {
|
||||||
|
QMAKE_POST_LINK += cp -r '"'$$FILE'"' '"'$$DDIR'"' $$escape_expand(\\n\\t)
|
||||||
|
}
|
||||||
|
win32 {
|
||||||
|
QMAKE_POST_LINK += xcopy '"'$$FILE'"' '"'$$DDIR'"' /e /y $$escape_expand(\\n\\t)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export(QMAKE_POST_LINK)
|
||||||
|
}
|
||||||
|
!win32 {
|
||||||
|
copyToDestdir($$files($$PWD/res/*))
|
||||||
|
}
|
||||||
|
win32 {
|
||||||
|
copyToDestdir($$PWD/res)
|
||||||
|
}
|
||||||
|
macx {
|
||||||
|
cache()
|
||||||
|
}
|
2
lib/readme.txt
Executable file
2
lib/readme.txt
Executable file
@ -0,0 +1,2 @@
|
|||||||
|
This directory contains any libraries that should be linked
|
||||||
|
to your project when it is built.
|
267751
res/dictionary.txt
Executable file
267751
res/dictionary.txt
Executable file
File diff suppressed because it is too large
Load Diff
3
src/readme.txt
Executable file
3
src/readme.txt
Executable file
@ -0,0 +1,3 @@
|
|||||||
|
This directory contains the source code files (*.cpp, *.h)
|
||||||
|
that you will write as you complete the assignment.
|
||||||
|
We will also put any instructor-provided code here.
|
76
src/wordchain.cpp
Executable file
76
src/wordchain.cpp
Executable file
@ -0,0 +1,76 @@
|
|||||||
|
#include <fstream>
|
||||||
|
#include <iostream>
|
||||||
|
#include <queue>
|
||||||
|
#include <stack>
|
||||||
|
#include <string>
|
||||||
|
#include <unordered_set>
|
||||||
|
|
||||||
|
const string ALPHABET = "abcdefghijklmnopqrstuvwxyz";
|
||||||
|
|
||||||
|
const char *const FORMAT_UNDERSCORE = "\033[4m";
|
||||||
|
const char *const END_FORMATTING = "\033[0m";
|
||||||
|
const char *const DICTIONARY_PATH = "./dictionary.txt";
|
||||||
|
|
||||||
|
std::string input(const char *message) {
|
||||||
|
if (message != nullptr)
|
||||||
|
std::cout << message;
|
||||||
|
|
||||||
|
std::cout << FORMAT_UNDERSCORE;
|
||||||
|
std::flush(std::cout);
|
||||||
|
|
||||||
|
std::string ret;
|
||||||
|
std::getline(std::cin, ret);
|
||||||
|
std::cout << END_FORMATTING;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string fileRead(const std::string &filePath) {
|
||||||
|
std::ifstream file(filePath, std::ios::binary);
|
||||||
|
if (!file.is_open())
|
||||||
|
throw std::runtime_error("File couldn't be found");
|
||||||
|
|
||||||
|
std::string content;
|
||||||
|
const int BUF_LENGTH = 1024;
|
||||||
|
char buf[BUF_LENGTH];
|
||||||
|
while (file.read(buf, BUF_LENGTH))
|
||||||
|
content.append(buf, file.gcount());
|
||||||
|
content.append(buf, file.gcount());
|
||||||
|
|
||||||
|
if (!file.eof() && file.fail())
|
||||||
|
throw std::runtime_error("Error: Failed to read the file '" + filePath +
|
||||||
|
"'");
|
||||||
|
|
||||||
|
return content;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::unordered_set<std::string> readDictionary() {
|
||||||
|
std::string fileContent = fileRead(DICTIONARY_PATH);
|
||||||
|
std::unordered_set<std::string> set;
|
||||||
|
size_t last = 0, idx;
|
||||||
|
while ((idx = fileContent.find('\n', last)) != std::string::npos) {
|
||||||
|
std::string sub = fileContent.substr(last, idx - last);
|
||||||
|
set.insert(sub);
|
||||||
|
last = idx + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
set.insert(fileContent.substr(last));
|
||||||
|
return set;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
std::cout << "Welcome to TDDD86 Word Chain.\n"
|
||||||
|
<< "If you give me two English words, I will transform the\n"
|
||||||
|
<< "first into the second by changing one letter at a time.\n\n"
|
||||||
|
<<"Please type two words: ";
|
||||||
|
std::flush(std::cout);
|
||||||
|
|
||||||
|
std::unordered_set<std::string> dictionary = readDictionary();
|
||||||
|
std::string userInput = input(nullptr);
|
||||||
|
size_t wordSep = userInput.find(' ');
|
||||||
|
std::string wordOne = userInput.substr(0, wordSep);
|
||||||
|
std::string wordTwo = userInput.substr(wordSep + 1);
|
||||||
|
std::cout << "Chain from " << wordTwo << " to " << wordOne << std::endl;
|
||||||
|
|
||||||
|
std::cout << "Have a nice day!" << std::endl;
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user