我正在尝试创建一个程序,该程序将使用输入/输出文件仅基于首字母来按字母顺序排列名称。
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
using namespace std;
const int SIZE = 50;
void writeletter(string names[], int size, char letter, ostream& out);
int main()
{
ifstream in;
ofstream o;
string n[SIZE];
int s=0;
in.open("input.txt");
o.open("output.txt");
if(in.fail())
{
cout<<"fail"<<endl;
exit(1);
}
if(o.fail())
{
cout<<"fail"<<endl;
exit(1);
}
while (!in.eof())
{
in>>n[s];
s++;
}
char l[26]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
for(int i =0; i<s; i++)
writeletter(n,s,l[i],o);
in.close();
o.close();
return 0;
}
void writeletter(string names[], int size, char letter, ostream& out)
{
for(int i = 0; i < size; i++)
{
if(names[i]==letter[i][0])
out<<names[i]<<endl;
}
}
这是我得到的错误
46:23:错误:下标的值不是数组,指针或向量
这是给我writeletter()
函数中的if语句的。我认为大多数代码是正确的。
正如编译器指出的那样,只能使用[]运算符来访问某些内容。一个char没有任何元素,因此访问它毫无意义,并且编译器也不允许您这样做。也许它曾经是不同的类型,并且重构破坏了某些东西。
我怀疑代码应该是这样的:
void writeletter(string names[], int size, char letter, ostream& out)
{
for(int i = 0; i < size; i++)
{
if(names[i][0]==letter)
out<<names[i]<<endl;
}
}