[英]The longest string
我正在閱讀K&R C編程語言書並嘗試解決所有練習。
有一個示例程序可以在輸入中找到最長的字符串。 它基本上從輸入中逐個讀取字符串,並以預定義的長度存儲在數組中最長的字符串。 換句話說,它假定最長字符串長度的上限。
在此程序之后,有一個練習要求更改程序,使其不承擔長度的約束。 我不知道如何在不使用動態內存分配的情況下實現這一點(本書后面的章節對此進行了討論)。
如果我是正確的,在編譯期間定義C中的數組,因此除非我們動態分配內存,否則它們的長度是靜態的。
我假設你指的是第30頁的練習1.16。完整的陳述是
練習1-16。 修改最長行程序的主程序,以便正確打印任意長輸入行的長度,並盡可能多地打印文本。
如果長度是任意的,則無法返回整個字符串,因為您必須存儲它,這將需要動態內存分配。 但是,您可以稍微修改主例程,以便正確計算字符串的長度,並輸出“盡可能多”的文本,即最多固定長度。
這是一個可能的答案:
#define MAXLINE 1000 /* maximum input line size */
main() {
int buf_len; /* current buffer length (<= MAXLINE) */
int len = 0; /* current full line length */
int max = 0; /* maximum length seen so far */
char buffer[MAXLINE]; /* current input line */
char line[MAXLINE]; /* prefix of longest-line candidate */
char longest[MAXLINE]; /* longest line saved here */
while ((buf_len = getline(buffer, MAXLINE)) > 0) {
if (len == 0) /* this is the first chunk of the string */
copy(line, buffer);
len += buf_len;
if (buf_len < MAXLINE || buffer[MAXLINE-2] == '\n') {
/* the string was terminated */
if (len > max) {
max = len;
copy(longest, line);
}
/* this line was fully processed */
/* now reset len to 0 and process the next string */
len = 0;
}
}
if (max > 0)
printf("%s", longest);
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.