Я использую Microsoft Visual C++ 2010 Express. Запуск отладки моих результатов коды в следующих ошибках:C++ - Получение значений из текстового файла в массив для сравнения
1>------ Build started: Project: Word Unscrambler, Configuration: Debug Win32 ------
1> word unscrambler.cpp
1>c:\users\c m j richards\documents\visual studio 2010\projects\word unscrambler\word unscrambler\word unscrambler.cpp(22): error C2057: expected constant expression
1>c:\users\c m j richards\documents\visual studio 2010\projects\word unscrambler\word unscrambler\word unscrambler.cpp(22): error C2466: cannot allocate an array of constant size 0
1>c:\users\c m j richards\documents\visual studio 2010\projects\word unscrambler\word unscrambler\word unscrambler.cpp(22): error C2133: 'match' : unknown size
1>c:\users\c m j richards\documents\visual studio 2010\projects\word unscrambler\word unscrambler\word unscrambler.cpp(23): error C2057: expected constant expression
1>c:\users\c m j richards\documents\visual studio 2010\projects\word unscrambler\word unscrambler\word unscrambler.cpp(23): error C2466: cannot allocate an array of constant size 0
1>c:\users\c m j richards\documents\visual studio 2010\projects\word unscrambler\word unscrambler\word unscrambler.cpp(23): error C2133: 'used' : unknown size
1>c:\users\c m j richards\documents\visual studio 2010\projects\word unscrambler\word unscrambler\word unscrambler.cpp(59): warning C4154: deletion of an array expression; conversion to pointer supplied
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Я по существу пытаюсь создать слово Unscrambler, используя булеву массив размера, равную длину строки слова, передаваемую в функцию из "input.txt". Затем это сравнивается с содержимым «wordlist.txt» для сопоставления символов.
Сравнимые строки, а также те, которые были успешно сопоставлены, должны отображаться через окно консоли и экспортироваться в «output.txt».
Я поместил текстовые файлы «wordlist» и «input» в рабочий каталог (то есть то же, что и файл .vC++ proj), но, судя по неудачному отладке, я не думаю, что ifstream получает доступ к этим текстам файлы.
А вот код:
#include<string>
#include<cstdio>
#include<iostream>
#include<fstream>
using namespace std;
string unscramble(string scram)
{
int scramlen = scram.length();
int i = 0;
string word;
ifstream file("wordlist.txt");
if (file.is_open())
{
while (file.good())
{
getline(file,word);
if (scramlen == word.length())
{
bool match[scramlen];
string used[scramlen];
int matchcount = 0;
for (int x = 0; x < scramlen; x++)
{
string lttrscram = scram.substr(x,1);
for (int y = 0; y < scramlen; y++)
{
string lttrunscram = word.substr(y,1);
if (lttrscram == lttrunscram)
{
if (used[y] == lttrscram) match[matchcount] = false;
else
{
used[y] = lttrscram;
match[matchcount] = true;
matchcount++;
break;
}
}
}
}
i = 0;
for (int j = 0; j < scramlen; j++)
{
if (match[j] == true) i++;
}
if (i == scramlen)
{
cout <<"Match found: " << word << endl;
return word;
}
delete [] match;
}
}
file.close();
}
}
int main()
{
string inputkey[10];
string outputkey[10];
int wordnum = 0;
int count = 0;
string wordtemp;
ifstream file("input.txt");
if (file.is_open())
{
while (file.good());
{
getline (file,wordtemp);
inputkey[count] = wordtemp;
count++;
}
file.close();
}
for (int i = 0; i < 10; i++)
{
wordnum++;
cout <<"#" << wordnum << " Comparing: " << inputkey[i] << endl;
outputkey[i] = unscramble(inputkey[i]);
}
ofstream output;
output.open("output.txt");
for (int j = 0; j < 10; j++)
{
if (j == 9) output << outputkey[j];
else output << outputkey[j] << ", ";
}
output.close();
system("pause");
return 0;
}
Причина ошибки компиляции не имеет ничего общего с инициализацией переменной. – PaulMcKenzie
Я прочитал ваш ответ, и я ничего не узнал. Не могли бы вы рассказать мне, в чем причина? –
Что не понято в моем ответе? Это совершенно ясно - ОП пытается объявить массив, используя переменную как количество элементов. Это не законный C++. Вы утверждали, что причина в том, что 'scramlen' не был инициализирован - это явно ложно. Неважно, было ли это или не было инициализировано, вы не можете объявлять массивы с использованием переменной в виде количества элементов. – PaulMcKenzie