私は、ファイルを開き、各行を読み込み、最後の名前、名前:3つのテストのスコアを区切ることができるプログラムを作成しています。読み込まれるファイルの形式はMark Titan:80 80 85です。私はTITAN、Mark:80 80 85を出力すると仮定しています。私たちは文字列を使用していますが、これまで私の教師コードを使用しています。 1から100までの順でテストスコアを表示します(最初は1で始まるので100が最初に来ますが、その後は修正できます)。アルファベット順に名前が表示されます。私は行のsubstrを作成する助けを必要とし、ちょうどフルネームの文字列を作成し、それを最初と最後に分割して、それを正しくソートします。私は.findを使いこなしていますが、このベクトルをより小さなベクトルに分割する方法がわかりません。助けてくれてありがとう。C++の文字列ヘルプ、文字列を打つ
#include <iostream>
#include <fstream>
#include <vector>
#include <sstream>
using namespace std;
void openFile(ifstream &in);
void processFile(ifstream &in, vector<string> &list);
void display(const vector<string> &list);
void sort(vector<string> &list);
int main(int argc, char *argv[])
{
ifstream in;
string line;
vector<string> words;
openFile(in);
processFile(in, words);
display(words);
return 0;
}
void openFile(ifstream &in)
{
string fileName;
bool again;
do
{
again = false;
cout<<"What is the name of the file to you wish to sort? (.txt will be added if no extension is included): ";
cin>>fileName;
if(fileName.find('.') >= fileName.size())
fileName += ".txt";
in.open(fileName.c_str());
if(in.fail())
{
in.close();
in.clear();
again = true;
cout<<"That file does not exist! Please re-enter"<<endl;
}
}while(again);
}
void processFile(ifstream &in, vector<string> &list)
{
string line, word;
int s1,s2,s3;
stringstream ss;
while(getline(in, line, ':'))
{
ss<<line.substr(line.find(' ') + 1);
while(ss>>word)
list.push_back(word);
ss.clear();
}
sort(list);
}
void sort(vector<string> &list)
{
for(unsigned int i = 0; i < list.size(); ++i)
for(unsigned int j = 0; j < list.size(); ++j)
if(list[i] < list[j])
{
string temp = list[i];
list[i] = list[j];
list[j] = temp;
}
}
void display(const vector<string> &list)
{
cout<<"The file read had "<<list.size()<<" words in it"
<<endl<<"In sorted order, they are:"<<endl;
for(unsigned int i = 0; i < list.size();++i)
cout<<list[i]<<endl;}
[分割の可能性のある重複した文字列C++?](http://stackoverflow.com/questions/236129/split-a-string-in-c) –