0
這是我一直致力於學習C++的程序。它將文件輸入到兩個不同的數組(字符串,2d double)中,而不是排序,平均值,將平均值添加到2d雙數組的結尾而不是輸出。我試圖實現一個搜索(最好是二進制),找到與searchItem變量匹配的名稱,而不是獲取與該名稱關聯的分數輸出。我有一個如何實現抓分數的想法。將元素位置存儲到變量中,找到名稱並使用它來引用正確分數所在的行。如果在二進制搜索中遇到問題,則不會發生編譯錯誤,也不會執行任何操作。從我所瞭解的我正在使用的算法與我見過的其他算法相同。我是否也在正確的軌道上提出了我的想法或者有更好的方法?在我看來,這是最簡單的方式,但我對這種語言的使用經驗有限。先謝謝你。二進制搜索字符串數組和額外功能
#include <stdlib.h>
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
using namespace std;
const int ROWS = 11;
const int COLS = 4;
void ArrayManip (string x[], double y[][COLS], int length);
int main()
{
ifstream inFile;
inFile.open("bowlers2.txt");
const int SIZE = 10;
double scores[ROWS][COLS];
string names[SIZE];
string mystring;
if (!inFile)
{
cout << "Can not open the input file"
<< " This program will end."<< "\n";
return 1;
}
for(int r = 0; r < SIZE; r++)
{
getline(inFile, names[r]);
for(int c = 0; c < (COLS - 1); c++)
{
getline(inFile, mystring);
scores[r][c] = atoi(mystring.c_str());
}
}
inFile.close();
ArrayManip (names, scores, SIZE);
return 0;
}
void ArrayManip (string x[], double y[][COLS], int LENGTH)
{
int i,j,k,
first = 0,
last = LENGTH - 1,
middle,
position = -1;
bool found = false;
string searchItem = "keith";
string sValue;
double dValue;
double dArray[COLS - 1];
double sum = 0;
double avr;
//Sort names and scores
for(i = 1; i < LENGTH; i++)
{
sValue = x[i];
for (k = 0; k < (COLS - 1); k++)
{
dArray[k] = y[i][k];
}
for(j = i - 1; j >= 0 && x[j] > sValue; j--)
{
x[j + 1] = x[j];
for (k = 0; k < (COLS - 1); k++)
{
y[j + 1][k] = y[j][k];
}
}
x[j + 1] = sValue;
for (k = 0; k < (COLS - 1); k++)
{
y[j + 1][k] = dArray[k];
}
}
for(k = 0; k < LENGTH; k++)
for(i = 1; i < (COLS - 1); i++)
{
dValue = y[k][i];
for(j = i - 1; j >= 0 && y[k][j] > dValue; j--)
{
y[k][j + 1] = y[k][j];
}
y[k][j + 1] = dValue;
}
//average and store rows
for(i=0;i<LENGTH;i++)
{
for(j = 0; j < (COLS - 1); j++)
{
sum += y[i][j];
}
avr = sum/(COLS -1);
y[i][j++] = avr;
sum = 0;
}
//average and store columns
for(j=0;j<(COLS - 1);j++)
{
for(i=0;i<LENGTH;i++)
{
sum += y[i][j];
}
avr = sum/LENGTH;
y[i++][j] = avr;
sum = 0;
}
cout << fixed << showpoint << setprecision(2);
cout << "Averages for all Players:\n";
for(i=0;i<(COLS - 1);i++)
{
cout << "Score " << (i+1) << " average: " << y[LENGTH][i] << "\n";
}
cout << "\n";
for(i=0;i<LENGTH;i++)
{
cout << "player " << (i+1) << ": " << x[i] << "\n";
for(j=0;j<COLS;j++)
{
if(j < (COLS - 1))
{
cout << "score " << (j+1) << ": " << y[i][j] << "\n";
}
else
cout << "player average: " << y[i][j] << "\n\n";
}
}
while(!found && first <= last)
{
middle = (first + last)/2;
if(x[middle] == searchItem)
{
found = true;
cout << x[middle] << "\n";
}
else if (x[middle] > searchItem)
last = middle - 1;
else
first = middle + 1;
}
}
輸入文件:bowlers2.txt
Linus too good
100
23
210
Charlie brown
1
2
12
Snoopy
300
300
100
Peperment Patty
223
300
221
Pig Pen
234
123
212
Red Headed Girl
123
222
111
Marcey
1
2
3
keith hallmark
222
300
180
anna hallmark
222
111
211
roxie hallmark
100
100
2
我明白了。我錯過了,我沒有整個字符串作爲搜索變量..感謝對子字符串搜索的引用。 – mrbw