C++ Primer 5th 课后习题8.10、8.11、8.13

来源:互联网 发布:突变体软件 编辑:程序博客网 时间:2024/05/17 00:03
//习题8.10int main(){    ifstream in("1");    if (!in) {        cerr << "无法打开文件" << endl;    }    string line;    vector<string> words;    while (getline(in, line))        words.push_back(line);    in.close();    for (auto i : words)    {        string word;        istringstream ist(i);        while (ist >> word)            cout << word << endl;    }    return 0;}//习题8.11struct PersonInfor{    string name;    vector<string> phones;};int main(){    vector<PersonInfor> people;    string line, na;    istringstream record;    while (getline(cin, line)) {        PersonInfor info;               record.clear();//notice重复使用字符串流时每次都要clear        record.str(line);        record >> info.name;        while (record >> na)            info.phones.push_back(na);        people.push_back(info);    }}//习题8.13电话号码程序--出错原因:main函数读取的文件有问题//忘了将文件放在exe同名文件夹,而是放在了main函数的文件夹//运行时用命令行打开,如text.exe 1.txt即可打开。struct PersonInfo{    string name;    vector<string> phones;};string format(const string &s) {    return s; }bool valid(const string &s) {    //此处简单返回true,后续再改    return true;}//int main()int main(int argc, char *argv[]){    string line, word;    vector<PersonInfo> people;    istringstream record;    if (argc != 2) {        cerr << "请给出文件名" << endl;        return -1;    }    ifstream in(argv[1]);    if (!in)    {        cerr << "无法打开文件" << endl;        return -1;    }    while (getline(in, line)) {        PersonInfo info;        record.clear();        record.str(line);        record >> info.name;        while (record >> word)            info.phones.push_back(word);        people.push_back(info);    }    ostringstream os;       for (const auto &entry : people) {        ostringstream formatted, badNums;        for (const auto &nums : entry.phones) {            if (!valid(nums)) {                badNums << " " << nums;            }            else                formatted << " "                 << format(nums);//????????????????            if (badNums.str().empty())                os << entry.name << " "                 << formatted.str() << endl;            else                cerr << "input error : " << entry.name                 << " invalid number(s) "                 << badNums.str() << endl;        }        cout << os.str() << endl;    }}
0 0
原创粉丝点击