演算法競賽入門經典(第二版)第三章陣列和字串中競賽題目選講1
阿新 • • 發佈:2018-11-04
3-1例題tex中的引號
在TeX中,左雙引號是“"”,右雙引號是“"”,輸入一篇包含雙引號的文章你的任務是把它轉換成tex的格式
樣例輸入:
“you are smart,”
樣例輸出
“you are smart,”
- 使用fgetc(fin)可以開啟的檔案fin中讀取一個字元。一般情況下應當在檢查它不是EOF後再將其轉換成char值。從標準輸入讀取一個字元可以用getchar,它等價於fgetc(stdin)
- 如果用scanf("%d",&n)讀取整數,則要是在輸入123多加了一個空格,getchar讀取的將是這一個空格,如果在123之後緊跟著換行則讀取到將是回車符“\n"
- 在使用fgetc和getchar時應避免寫出和作業系統相關的程式
- fgets(buf,maxn,fin)將讀取完整的一行放在字元陣列buf種。應當保證buf足夠存放下檔案的一行內容。除了在檔案結束前沒有遇到”\n“這種特殊情況外,buf總是以”\n“結尾。當一個字元都沒有讀到時,fgets返回null。
- gets(s),沒有指明讀取的最大字元數。這裡就出現了一個潛在的問題gets將不停地往s種儲存內容,而不管是否儲存得下
- C語言並不禁止程式讀寫"非法記憶體"
- 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;
}