日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

实验 7:流类库与输入输出

發(fā)布時(shí)間:2024/1/17 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 实验 7:流类库与输入输出 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

二、實(shí)驗(yàn)準(zhǔn)備

結(jié)合第 11 章教材、課件,復(fù)習(xí)/學(xué)習(xí)如下內(nèi)容:

  • 基礎(chǔ)知識(shí)
    • 流是什么?如何理解?
    • C++中 I/O 是通過(guò)什么來(lái)實(shí)現(xiàn)的?
    • 常用 I/O 流類(lèi)的繼承/派生層次關(guān)系
    • 預(yù)定義標(biāo)準(zhǔn)流對(duì)象 cin, cout, cerr, clog
  • C++中格式化 I/O 方法
  • 文件 I/O 方法及常用成員函數(shù)

三、實(shí)驗(yàn)內(nèi)容

  • 基礎(chǔ)練習(xí)
    • 教材習(xí)題 11-7
    • 教材習(xí)題 11-3
    • 教材習(xí)題 11-4
  • 應(yīng)用練習(xí)
    • 已知有班級(jí)名單文件 list.txt(見(jiàn)實(shí)驗(yàn) 7 附件包)。編寫(xiě)一個(gè)應(yīng)用程序?qū)崿F(xiàn)隨機(jī)抽點(diǎn)
      5 位同學(xué),在屏幕上顯示結(jié)果,同時(shí),也將結(jié)果寫(xiě)入文件 roll.txt。
      • 編寫(xiě)程序?qū)崿F(xiàn)題目基本功能要求。(必做)
      • (******選做******)
        對(duì)①中實(shí)現(xiàn)的基本功能進(jìn)行完善、擴(kuò)充,使得這個(gè)點(diǎn)名應(yīng)用程序更靈活、更方便。比如:
        • 從鍵盤(pán)輸入班級(jí)文件名,支持對(duì)不同班級(jí)的點(diǎn)名操作;
        • 從鍵盤(pán)輸入用于保存點(diǎn)名結(jié)果的文件名。更靈活地,自動(dòng)獲取當(dāng)前系統(tǒng)日期作為文件名,比如 20180612.txt。(如果希望更細(xì)粒度,文件名可以到小時(shí)和分鐘這一層級(jí));
        • 隨機(jī)抽點(diǎn)人數(shù)不固定,通過(guò)鍵盤(pán)按鍵控制何時(shí)抽點(diǎn)結(jié)束;
        • 通過(guò)菜單及程序的函數(shù)模塊劃分,或類(lèi)的設(shè)計(jì)與實(shí)現(xiàn),做成一個(gè)更完善的應(yīng)用,等等。
    • 統(tǒng)計(jì)英文文本文件字符數(shù)、單詞數(shù)、行數(shù),文件名由鍵盤(pán)輸入。
      • 編寫(xiě) C++程序?qū)崿F(xiàn)題目基本功能要求。(必做)
      • ******選做******
        • 提供菜單,由用戶(hù)選擇統(tǒng)計(jì)內(nèi)容;
        • 思考當(dāng)文本內(nèi)容數(shù)量級(jí)偏大,①處已實(shí)現(xiàn)的程序能否勝任,實(shí)現(xiàn)快速統(tǒng)計(jì)?在算法和處理邏輯上是否存在進(jìn)一步改進(jìn)的部分?

四、實(shí)驗(yàn)步驟

4.1 基礎(chǔ)練習(xí)

4.1.1 11-7

  • 注釋:
#include <iostream> using namespace ::std; int main() {ios_base::fmtflags original_flags = cout.flags(); //保存cout參數(shù)設(shè)置 cout<< 812<<'|';cout.setf(ios_base::left,ios_base::adjustfield); //設(shè)置cout的對(duì)齊方式為左對(duì)齊 cout.width(10); //將cout寬度改為10 cout<< 813 << 815 << '/n';cout.unsetf(ios_base::adjustfield); //取消cout對(duì)齊方式的設(shè)置 cout.precision(2);// 設(shè)置浮點(diǎn)數(shù)輸出的精度值 cout.setf(ios_base::uppercase|ios_base::scientific); //設(shè)置浮點(diǎn)數(shù)的顯示參數(shù) cout << 831.0 ;cout.flags(original_flags); //恢復(fù)cout原參數(shù)設(shè)置 return 0; }
  • Screenshot:

    4.1.2 11-3

  • Code:
#include<bits/stdc++.h> using namespace std; int main(){ofstream fout("test1.txt");fout<<"已成功寫(xiě)入文件!";fout.close();return 0; }
  • 演示:

4.1.3 11-4

  • Code:
#include<bits/stdc++.h> using namespace std; int main(){ifstream fin("test1.txt");string tmp;getline(fin,tmp);cout<<tmp;fin.close();system("pause");return 0; }
  • 演示:

4.2 應(yīng)用練習(xí)

4.2.1

  • ①:必做部分:
#include<bits/stdc++.h> #define rap(a,b) for(int a=0;a<b;++a) using namespace std; struct stu{int num;string stuid,name,cls; }tmp; ostream &operator <<(ostream &o,const stu &tmp){o<<tmp.num<<" "<<tmp.stuid<<" "<<tmp.name<<" "<<tmp.cls<<endl;return o; } ifstream fin; int main(){ifstream fin("list.txt");vector<stu>a;while(fin>>tmp.num>>tmp.stuid>>tmp.name>>tmp.cls){a.push_back(tmp);}//cout<<a.size();fin.close();ofstream fout("roll.txt");srand((unsigned)time(NULL)); rap(i,5){int tmp2=rand()%a.size();cout<<a[tmp2];fout<<a[tmp2]; }fout.close();return 0; }

控制臺(tái)窗口運(yùn)行結(jié)果:

運(yùn)行文件夾及文件截圖:

  • ②:選做部分
    實(shí)現(xiàn)功能:通過(guò)輸入班級(jí)序號(hào)選擇班級(jí)進(jìn)行點(diǎn)名,通過(guò)ENTER鍵控制點(diǎn)名數(shù)量,通過(guò)時(shí)間或用戶(hù)輸入的字符串保存文件:
    Code:
#include<bits/stdc++.h> #define rap(a,b) for(int a=0;a<b;++a) using namespace std; struct stu{int num;string stuid,name,cls; }tmp; ostream &operator <<(ostream &o,const stu &tmp){o<<tmp.num<<" "<<tmp.stuid<<" "<<tmp.name<<" "<<tmp.cls<<endl;return o; } int cmp(const stu &a,const stu &b){return a.cls>b.cls; } void callbyclass(vector<stu>a,vector<stu>*res){int sz=a.size();sort(a.begin(),a.end(),cmp);vector<int>clsidx; string tmp=a[0].cls;clsidx.push_back(0);rap(i,sz){if(a[i].cls!=tmp){clsidx.push_back(i);tmp=a[i].cls;}}clsidx.push_back(sz);cout<<"Class:"<<endl;rap(i,clsidx.size()-1)cout<<i+1<<" : "<<a[clsidx[i]].cls<<endl;cout<<"Please Choose Class num to call student"<<endl;int idx;cin>>idx;while(idx>clsidx.size()){cout<<"Wrong Class number, plz choose again!"<<endl;cin>>idx;}getchar();do{int t=rand()%(clsidx[idx]-clsidx[idx-1]);cout<<a[t+clsidx[idx-1]];res->push_back(a[t+clsidx[idx-1]]);}while(getchar()=='\n'); } int main(){time_t t = time(0);ifstream fin("list.txt");vector<stu>a;while(fin>>tmp.num>>tmp.stuid>>tmp.name>>tmp.cls){a.push_back(tmp);}fin.close();srand((unsigned)time(NULL));vector<stu>res;callbyclass(a,&res);cout<<"Save by time enter 1, by your desired string enter 2.\n";int tmp;cin>>tmp;if(tmp==1){char ch[64];strftime(ch, sizeof(ch), "%Y%m%d%H%M%S.txt", localtime(&t)); ofstream fout(ch);rap(i,res.size())fout<<res[i];fout.close();}else if(tmp==2){string n;cout<<"\nPlz enter your filename:"<<endl;cin>>n;ofstream fout(n.c_str());rap(i,res.size())fout<<res[i];fout.close();}return 0; }

演示效果如下:

4.2.2

  • ① 必做部分:
    算法思路:利用getline函數(shù)讀入每一行,每一行得到的 string.size() 即為每行字符數(shù)量,利用 strtok 分割文本得到單詞數(shù)。
    Code:
#include<bits/stdc++.h> using namespace std; const char de[]={'"',',',' ','.','\0','!','?','-','(',')','#','/',':'}; int main(){cout<<"Please Enter filname:\n";string filename;cin>>filename;ifstream fin(filename.c_str());string line;long long linenum=0,chnum=0,wordnum=0;while(getline(fin,line)){char *tmp=new char[line.length()+1];strcpy(tmp,line.c_str());char *tmp2;tmp2=strtok(tmp,de);if(tmp2!="")wordnum++;while((tmp2=strtok(NULL,de)))wordnum++;linenum++;chnum+=line.size();}cout<<"行數(shù):"<<linenum<<" 字符數(shù):"<<chnum<<" 單詞數(shù):"<<wordnum;fin.close();return 0; }
  • 測(cè)試文件1(233.txt):
  • 測(cè)試文件2 (bible.txt):

轉(zhuǎn)載于:https://www.cnblogs.com/shy-/p/9163026.html

總結(jié)

以上是生活随笔為你收集整理的实验 7:流类库与输入输出的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。