c程式語言 第二版 新版 習題1 21

2021-09-26 04:38:53 字數 1591 閱讀 6148

// 編寫程式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 ...