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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

如何利用C/C++逐行读取txt文件中的字符串(可以顺便实现文本文件的复制)

發布時間:2025/3/21 c/c++ 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何利用C/C++逐行读取txt文件中的字符串(可以顺便实现文本文件的复制) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?原文地址:? http://blog.csdn.net/stpeace/article/details/12404925

如下代碼均在Windows/VC++6.0下測試通過, 請一定注意linux和Windows文件格式的區別


? ? ? ?先用C語言寫一個丑陋的程序:

[cpp] view plain copy
  • #include?<stdio.h>??
  • #include?<stdlib.h>??
  • int?main()??
  • {??
  • ????FILE?*fp;??
  • ????if(NULL?==?(fp?=?fopen("1.txt",?"r")))??
  • ????{??
  • ????????printf("error\n");??
  • ????????exit(1);??
  • ????}??
  • ??
  • ????char?ch;??
  • ????while(EOF?!=?(ch=fgetc(fp)))??
  • ????{??
  • ????????printf("%c",?ch);??
  • ????}??
  • ??
  • ????fclose(fp);??
  • ??
  • ????return?0;??
  • }??
  • ???? 你只能看到結果,卻沒法利用每一行。 我們來改為:

    [cpp] view plain copy
  • //?VC++6.0??
  • ??
  • #include?<stdio.h>??
  • #include?<string.h>??
  • ??
  • int?main()??
  • {??
  • ????char?szTest[1000]?=?{0};??
  • ????int?len?=?0;??
  • ??
  • ????FILE?*fp?=?fopen("1.txt",?"r");??
  • ????if(NULL?==?fp)??
  • ????{??
  • ????????printf("failed?to?open?dos.txt\n");??
  • ????????return?1;??
  • ????}??
  • ??
  • ????while(!feof(fp))??
  • ????{??
  • ????????memset(szTest,?0,?sizeof(szTest));??
  • ????????fgets(szTest,?sizeof(szTest)?-?1,?fp);?//?包含了\n??
  • ????????printf("%s",?szTest);??
  • ????}??
  • ??
  • ????fclose(fp);??
  • ??
  • ????printf("\n");??
  • ??
  • ????return?0;??
  • }??
  • ? ? ? 這樣, 我們就是整行讀取了。

    ? ? ? 感覺C的讀取方法有點丑陋,還是看看C++吧:

    [cpp] view plain copy
  • #include?<fstream>??
  • #include?<string>??
  • #include?<iostream>??
  • using?namespace?std;??
  • ??
  • int?main()??
  • {??
  • ????ifstream?in("1.txt");??
  • ????string?filename;??
  • ????string?line;??
  • ??
  • ????if(in)?//?有該文件??
  • ????{??
  • ????????while?(getline?(in,?line))?//?line中不包括每行的換行符??
  • ????????{???
  • ????????????cout?<<?line?<<?endl;??
  • ????????}??
  • ????}??
  • ????else?//?沒有該文件??
  • ????{??
  • ????????cout?<<"no?such?file"?<<?endl;??
  • ????}??
  • ??
  • ????return?0;??
  • }??
  • ?????當然,你可以對上述程序進行修改,讓1.txt中的每一行輸入到2.txt中,如下:

    [cpp] view plain copy
  • #include?<fstream>??
  • #include?<string>??
  • #include?<iostream>??
  • using?namespace?std;??
  • ??
  • int?main()??
  • {??
  • ????ifstream?in("1.txt");??
  • ????ofstream?out("2.txt");??
  • ????string?filename;??
  • ????string?line;??
  • ??
  • ????if(in)?//?有該文件??
  • ????{??
  • ????????while?(getline?(in,?line))?//?line中不包括每行的換行符??
  • ????????{???
  • ????????????cout?<<?line?<<?endl;??
  • ????????????out?<<?line?<<?endl;?//?輸入到2.txt中??
  • ????????}??
  • ????}??
  • ????else?//?沒有該文件??
  • ????{??
  • ????????cout?<<"no?such?file"?<<?endl;??
  • ????}??
  • ??
  • ????return?0;??
  • }??
  • ????? 結果, 2.txt和1.txt中的內容完全一致,你可以用Beyond Compare比較一下,我比較過了。

    ?

    ???? 看來上述程序還能實現文件的復制呢,如下:

    [cpp] view plain copy
  • #include?<fstream>??
  • #include?<string>??
  • #include?<iostream>??
  • using?namespace?std;??
  • ??
  • void?fileCopy(char?*file1,?char?*file2)??
  • {??
  • ????//?最好對file1和file2進行判斷??
  • ??????
  • ????ifstream?in(file1);??
  • ????ofstream?out(file2);??
  • ????string?filename;??
  • ????string?line;??
  • ??
  • ????while?(getline?(in,?line))??
  • ????{???
  • ????????out?<<?line?<<?endl;??
  • ????}??
  • }??
  • ??
  • int?main()??
  • {??
  • ????fileCopy("1.txt",?"2.txt");??
  • ????return?0;??
  • }??
  • ???? 當然了,上述程序只能針對文本文件(不僅僅是.txt),對其它類型的文件,不適合。

    ?

    《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

    總結

    以上是生活随笔為你收集整理的如何利用C/C++逐行读取txt文件中的字符串(可以顺便实现文本文件的复制)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。