私は今この問題を1週間悩まされてきましたが、私はオンラインで何かを見つけることができないと思います。私自身で。文字配列内の特定の要素を指し示す
私の割り当ては、ファイルから名前を読み込み、ユーザーから新しいエントリを受け取り、そのエントリを並べ替えてファイルに書き出すプログラムを作成することです。これについての唯一の欠点は、それらを関数内でソートし、ポインタを使ってそうすることです。このコードは文字配列を使ってC++でも書かれているはずです。
私が今持っているコードは、このようになります。これは動作するバージョンですが、唯一の問題はポインタや関数を使用して名前をソートしないことです。
#include<iostream>
#include<cstdlib>
#include<fstream>
#include<cstring>
bool sorted;
using namespace std;
int main()
{
int i = 0;
int numNames = 0;
ifstream ifs;
ifs.open("namn.txt");
char c[20][20];
if(ifs.is_open())
{
while(!ifs.eof())
{
ifs >> c[i];
i++;
}
}
cout<<"How many names do you want to enter?"<<endl;
cin>>numNames;
for(int l = i-1; l<numNames+i-1; l++)
{
system("cls");
cout<<"Enter a name: ";
cin>>c[l];
}
while(sorted == false)
{
for(int j = 0; j<numNames+i-1; j++)
{
for(int k = j; k<numNames+i-1; k++)
{
if(c[j][0] > c[k][0])
{
char snorre[20];
strcpy(snorre,c[j]);
strcpy(c[j],c[k]);
strcpy(c[k],snorre);
}
else if(c[j][0] == c[k][0])
{
if(c[j][1] > c[k][1])
{
char snorre[20];
strcpy(snorre,c[j]);
strcpy(c[j],c[k]);
strcpy(c[k],snorre);
}
}
}
}
cout<<endl<<endl<<endl;
ofstream ofs;
ofs.open("namn.txt");
for(int o = 0; o<numNames+i-1; o++)
{
cout<<c[o]<<" ";
ofs<<c[o]<<endl;
}
ofs.close();
system("pause");
sorted = true;
}
}
誰かがこの問題で私を助けることができたので、あらかじめありがとう!
まず、std::string
にファイルからそれぞれの名前を取得します:あなたのコードを変更すると、それは次のように使用するべきであるthis- :)
http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered- wro ng –
文字列に最初の2文字が同じ(そして他のいくつかの場合) –
の場合、ソートがうまくいかないと思うでしょう。おそらく、意図した答えは、それぞれが1つの文字列を指しているポインタの配列を作成し、 'strcpy'を使わないでください。 (これは現代のコーディング基準ではひどいですが、あなたの割り当てが1985年以来更新されていないように思えます) –