1. 程式人生 > >演算法競賽入門經典(第二版)第三章陣列和字串中競賽題目選講1

演算法競賽入門經典(第二版)第三章陣列和字串中競賽題目選講1

3-1例題tex中的引號

在TeX中,左雙引號是“"”,右雙引號是“"”,輸入一篇包含雙引號的文章你的任務是把它轉換成tex的格式
樣例輸入:
“you are smart,”
樣例輸出
“you are smart,”

  1. 使用fgetc(fin)可以開啟的檔案fin中讀取一個字元。一般情況下應當在檢查它不是EOF後再將其轉換成char值。從標準輸入讀取一個字元可以用getchar,它等價於fgetc(stdin)
  2. 如果用scanf("%d",&n)讀取整數,則要是在輸入123多加了一個空格,getchar讀取的將是這一個空格,如果在123之後緊跟著換行則讀取到將是回車符“\n"
  3. 在使用fgetc和getchar時應避免寫出和作業系統相關的程式
  4. fgets(buf,maxn,fin)將讀取完整的一行放在字元陣列buf種。應當保證buf足夠存放下檔案的一行內容。除了在檔案結束前沒有遇到”\n“這種特殊情況外,buf總是以”\n“結尾。當一個字元都沒有讀到時,fgets返回null。
  5. gets(s),沒有指明讀取的最大字元數。這裡就出現了一個潛在的問題gets將不停地往s種儲存內容,而不管是否儲存得下
  6. C語言並不禁止程式讀寫"非法記憶體"
  7. C語言種的gets(s)存在緩衝區溢位漏洞,不推薦使用。在C11標準裡,該函式已被正是刪除。
//本題的特點是可以邊讀邊處理,而不需要把輸入字串完整地存下來
#include<stdio.h> int main() { int c,q=1; while((c=getchar())!=EOF) { if(c=='"'){printf("%s",q?"“":"”");q=!q;} else printf("%c",c); } return 0; }