// 編寫程式entab,將空格串替換為最少數量的製表符和空格,但要保持單詞之間的間隔不變
#include#define stopbit 8 /* 製表符終止位 */
#define maxline 1001 /* 允許的輸入行的最大長度 */
typedef signed char int8_t;
static void entab(int8_t s);
/* 空格串替換為最少數量製表符,那麼空格串必須包含乙個或n個製表符終止位 */
int main(void)
;//當前的輸入行
int c, i = 0;
freopen("c:\\\\users\\wwwzh\\desktop\\data.in", "r", stdin);
freopen("c:\\\\users\\wwwzh\\desktop\\data.out", "w", stdout);
while ((c = getchar()) != eof)
i++;
} return 0;
}extern int detab(char s);
/* 如果空格串中包含製表符終止位,替換成等價的製表符和空格 */
static void entab(int8_t str)
; int i = 0, j = 0;
//1.複製乙份並把字串全部展開
while (str[i] != '\0')
detab(s);//需要把整個輸入展開
//2.改變字串
i = 0;
while (s[i] != '\0')
estr++;
}estr--;//最終空格串結束座標
num = estr - estop;
if (count > 0)//空格串存在轉換
while (num > 0)
while (k <= estr)
}i = estr;
} i++;
} //3.把改變的字串賦給原字串
i = 0;
while (s[i] != '\0')
i++;
} str[j] = '\0';
}
2個說明
第1個是為什麼要把製表符先轉換成空格再換成製表符,如果直接處理空格串(前面有\t)
那應該也能處理但應該麻煩
第2個:因為用的是signed char,所以對中文(雖然顯示的是乙個字元,但實際處理它要佔2個字元)的處理估計有問題
但把它轉換成等價字元的英文就沒事
c程式語言 第二版 新版 習題1 9
include define maxsize 10000 允許儲存的最大長度 輸入複製到輸出,並將連續的多個空格用乙個空格代替 int space compression char s int main void int i 0,c freopen c users wwwzh desktop dat...
c程式語言 第二版 新版 習題1 20
編寫程式detab,將輸入中的製表符替換成適當數目的空格,使空格充滿到下乙個製表符 終止位的地方.假設製表符終止位的位置是固定的,比如每隔n列就會出現乙個製表符 終止位 include define stopbit 8 製表符終止位 define maxline 1001 允許的輸入行的最大長度 i...
c程式語言 第二版 新版 習題1 23
include define maxsize 1000000 允許儲存的程式最大長度 int remove comments char str int practice1 23 void int c,i 0 freopen c users wwwzh desktop data.in r stdin ...