Вывод трех массивов в файл на основе содержимого другого массива - PullRequest
1 голос
/ 24 февраля 2011

У меня есть массив, который отслеживает результаты поиска трех параллельных массивов.Параллельными массивами являются имена, идентификаторы и балансы.Имя связано с идентификатором и балансом, потому что все они имеют одинаковый индекс.Пользователь ищет имена, и программа должна выводить результаты поиска в текстовый файл с именем, идентификатором и балансом.Поэтому сейчас, каждый раз, когда поиск успешен (имя находится в массиве), я добавляю индекс этого имени в массив с именем resultsAr, например:

while(searchTerm != "done")
{
    searchResult = SearchArray(searchTerm, AR_SIZE, namesAr);

    if(searchResult == -1)
    {
        cout << searchTerm << " was not found.\n";
    }
    else
    {
        cout << "Found.\n";
        resultsAr[index] = searchResult;
        index++;
    }

    cout << "\nWho do you want to search for (enter done to exit)? ";
    getline (cin,searchTerm);

} // End while loop

Я не могу понять,как вывести это, хотя он выводит только имена, которые были найдены.Прямо сейчас я просто делаю это:

outFile << fixed << setprecision(2) << left;
outFile << setw (12) << "Id#" << setw(22) << "Name" << "Balance Due"
        << endl << endl;

for(index = 0; index < sizes; index++)
{
    outFile << left << setw (10) << idsAr[index] << setw(22) << namesAr[index] 
            << setw(3) << "$";
    outFile << right << setw(10) << balancesAr[index] << endl;
}

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

Спасибо, и это домашнее задание, поэтому точных ответов нетбыло бы просто ужасно.

РЕДАКТИРОВАТЬ: проблема с капитализацией на самом деле не проблема, я просто случайно сделал это, когда я размещал здесь, я думаю, извините за этоЧасть resultsAr работает, потому что после поиска содержимое массива является индексами имен, которые я искал.Функция SearchArray () выглядит следующим образом:

int SearchArray(string searchTerm,
             int size,
             string namesAr[])  
{  
// Variables  
int index;  
bool found;  

// Initialize
index = 0;
found = false;

while(index < size && !found)
{
    if(namesAr[index] == searchTerm)
    {
        found = true;
    }
    else
    {
        index++;
    }
}

if(found)
{
    return index;
}
else
{
    return -1;
}
}

Ответы [ 2 ]

1 голос
/ 24 февраля 2011

Мое удовольствие. Теперь я вижу, что ты делаешь. Что вам нужно сделать, это использовать другое косвенное. Вы хотите вывести результат только для тех индексов, которые хранятся в resultsAr.
Измените цикл for на что-то похожее на это:

int numFound = index;
for(index = 0; index < numFound; index++) {
    cout << left << "   "<<idsAr[resultsAr[index]];
}

Это означает, что сначала сохраните количество найденных вами индексов (в цикле while над ним) в "numFound". Затем выполняйте итерацию только по 0 ... numFound-1 и используйте двойное косвенное обращение при доступе к элементу; это означает, что посмотрите на resultsAr, который содержит найденный индекс, а затем используйте этот индекс для поиска фактических данных.

1 голос
/ 24 февраля 2011

Ваша функция SearchArray () возвращает первый индекс, по которому в массиве указателей на строки была найдена совпадающая строка? А затем сохранить его в массиве, который будет иметь только одну запись? Даже если это так, элемент, который вы храните, - это «SearchResult» (с большой буквы), который никогда не определяется.

-> Пожалуйста, опубликуйте полный исходный код (включая SearchArray ()).

EDIT:

Хорошо, спасибо за публикацию SearchArray (), но нам все еще нужно больше, в первом поле вы пишете:

resultsAr[index] = searchResult;

... но не давая нам петли. Кроме того, если вы хотите найти несколько имен, которые соответствуют "searchTerm", вам нужно будет написать SearchArray () либо вернуть массив индексов, либо принять стартовый индекс, в противном случае он вернет первый найденный имя несколько раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...