1.5
在之前的rearrange函式語句中,
if (columns[col]>=len....)break;
當字元的列範圍超過輸入行的末尾就停止複製,這種方式只適合列範圍以遞增順序排列的時候,請修改這條語句使列範圍不是按順序讀取的時候也可以完成任務。
#include #include#include
#define max_clos 20 /*所能處理的最大列號*/
#define max_input 1000 /*每個數入行的最大長度*/
int read_column_numbers(int columns,int
max);
void rearrange(char *output,char
const*input,int n_columns,int
const
columns[max_clos]);
int main(void
)
return
exit_success;}/*
讀取需要處理的列標號,如果超出規定範圍不予理會
*/int read_column_numbers(int columns,int
max)
/*判斷是否讀入的資料是成對的
*/if(num%2
)
while((ch=getchar())!=eof&&ch!='
\n'); /*
用來處理包含最後那個負值的所有字元
*/return
num;}/*
處理輸入行
*/void rearrange(char *output,char
const*input,int n_columns,int
const
columns[max_clos])
output[output_col]='\0'
;}
這道題本來想的是在read_columns_number語句中把列範圍按順序排列就好了。但是看了答案發現他是用上面的方法,使用continue語句我沒有想到。額,有乙個注意的細節就是它還多加了乙個語句,防止把乙個nul位元組複製進入輸出行。但是這一點我很不理解,感覺並不需要啊。後來想想大概是列範圍不是成對,在上面的判斷條件中你只可以判斷columns[col]是不是超過了輸入行長度,而columns[col+1]你並沒有判斷,所以如果columns[col+1]超過了,你就需要把nchars的值改變。不知道自己理解的對不對。。。
我的答案:
#include #include#include
#define max_clos 20 /*所能處理的最大列號*/
#define max_input 1000 /*每個數入行的最大長度*/
int read_column_numbers(int columns,int
max);
void rearrange(char *output,char
const*input,int n_columns,int
const
columns[max_clos]);
int main(void
)
return
exit_success;}/*
讀取需要處理的列標號,如果超出規定範圍不予理會
*/int read_column_numbers(int columns,int
max)
/*判斷是否讀入的資料是成對的
*/if(num%2
)
for(i=0;i1;i++)
if(i!=k)
}while((ch=getchar())!=eof&&ch!='
\n'); /*
用來處理包含最後那個負值的所有字元
*/return
num;}/*
處理輸入行
*/void rearrange(char *output,char
const*input,int n_columns,int
const
columns[max_clos])
output[output_col]='\0'
;}
在read_columns_numbers函式中選擇排序而已。。。。。
1.6修改rearrange程式,去掉輸入中列標號的個數必須是偶數的限制。如果讀入的列個數為奇數個,函式就會把最後乙個列範圍設定為最後乙個列標號所指定的列到行尾之間的範圍。
這道題其實很簡單,只需要把在rearrange函式中對於最後乙個列標號進行處理就好了,但是我把const字首取消了,沒有答案,有更好的方法嗎?
#include #include#include
#define max_clos 20 /*所能處理的最大列號*/
#define max_input 1000 /*每個數入行的最大長度*/
int read_column_numbers(int columns,int
max);
void rearrange(char *output,char
const*input,int n_columns,int
columns[max_clos]);
int main(void
)
return
exit_success;}/*
讀取需要處理的列標號,如果超出規定範圍不予理會
*/int read_column_numbers(int columns,int
max)
/*判斷是否讀入的資料是成對的
*/if(num%2
)
while((ch=getchar())!=eof&&ch!='
\n'); /*
用來處理包含最後那個負值的所有字元
*/return
num;}/*
處理輸入行
*/void rearrange(char *output,char
const*input,int n_columns,int
columns[max_clos])
output[output_col]='\0'
;}
《c和指標》筆記3
預設鏈結屬性,external,儲存於靜態記憶體 int a 5 預設鏈結屬性,其實extern是可以不要的,但是風格上加上關鍵字是有好處的,儲存於靜態記憶體 extern intb 因為加上了static,鏈結屬性從external變為internal,原始檔私有,儲存於靜態記憶體 static ...
《C和指標》學習筆記
define name length 30 define addr length 100 define phone length 11 define max addresses 1000 char const lookup address char const name char const loo...
《c和指標》 指標章節學習筆記
int main 使用指標間接訪問變數的值以及修改變數的值 int main pa是指位址,pa是指取這個位址的內容 則 a是變數a的位址,a就是解引用a的值 即變數a int main 使用指標的指標間接訪問變數的值 pa int main g cp 1 1 先運算 cp,再進行 1操作 2 首先...