ΠΠΎΠ³Π΄Π° ΠΌΡ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ»ΠΈ ΡΡΡΠΎΠΊΡ Π±ΠΎΠ»Π΅Π΅ Π΄Π»ΠΈΠ½Π½ΡΡ, ΡΠ΅ΠΌ ΡΠ°ΠΌΠ°Ρ Π΄Π»ΠΈΠ½Π½Π°Ρ ΠΈΠ· Π²ΡΠ΅Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ , ΡΠΎ Π½Π°ΠΌ Π½Π°Π΄ΠΎ Π±ΡΠ΄Π΅Ρ Π³Π΄Π΅-ΡΠΎ Π΅Π΅ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡΡ. ΠΠ΄Π΅ΡΡ Π½Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ Π²ΡΠΎΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ, copy, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΌΠ΅Π΅Ρ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ Π½ΠΎΠ²ΡΡ ΡΡΡΠΎΠΊΡ Π² Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ.
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° Π³Π»Π°Π²Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ Π±Ρ ΡΠΏΡΠ°Π²Π»ΡΠ»Π° ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ getline ΠΈ copy. ΠΠΎΡ ΠΊΠ°ΠΊ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π½Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π² ΡΠ΅Π»ΠΎΠΌ:
#include βΉstdio.hβΊ
#define MAXLINE 1000 /* ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ Π²Π²ΠΎΠ΄ΠΈΠΌΠΎΠΉ ΡΡΡΠΎΠΊΠΈ */
int getline(char line[], int MAXLINE);
void copy(char to[], char from[]);
/* ΠΏΠ΅ΡΠ°ΡΡ ΡΠ°ΠΌΠΎΠΉ Π΄Π»ΠΈΠ½Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ */
main()
{
int len; /* Π΄Π»ΠΈΠ½Π° ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΡΡΠΎΠΊΠΈ */
int max; /* Π΄Π»ΠΈΠ½Π° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΠΈΠ· ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅Π½Π½ΡΡ ΡΡΡΠΎΠΊ */
char line[MAXLINE]; /* ΡΠ΅ΠΊΡΡΠ°Ρ ΡΡΡΠΎΠΊΠ° */
char longest[MAXLINE]; /* ΡΠ°ΠΌΠ°Ρ Π΄Π»ΠΈΠ½Π½Π°Ρ ΡΡΡΠΎΠΊΠ° */
max = 0;
while (len = getline(line, MAXLINE)) βΊ 0)
if (len βΊ max) {
max = len;
copy(longest, line);
}
if (max βΊ 0) /* Π±ΡΠ»Π° Π»ΠΈ Ρ ΠΎΡΡ ΠΎΠ΄Π½Π° ΡΡΡΠΎΠΊΠ°? */
printf("%s", longest);
return 0;
}
/* getline: ΡΠΈΡΠ°Π΅Ρ ΡΡΡΠΎΠΊΡ Π² s, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π΄Π»ΠΈΠ½Ρ */
int getline(char s[], int lim)
{
int c, i;
for (i = 0; i βΉ lim-1 && (c = getchar()) != EOF && Ρ != '\n'; ++i)
s[i] = c;
if (c == '\n') {
s[i] = c;
++i;
}
s[i] = '\0';
return i;
}
/* copy: ΠΊΠΎΠΏΠΈΡΡΠ΅Ρ ΠΈΠ· 'from' Π² 'to'; to Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΠΎΠΉ */
void copy(char to[], char from[])
{
int i;
i = 0;
while ((to[i] = from[i]) != '\0')
++i;
}
ΠΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ getline ΠΈ copy, ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π² Π½Π°ΡΠ°Π»Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΡΠΎΠΌ ΠΆΠ΅ ΡΠ°ΠΉΠ»Π΅, ΡΡΠΎ ΠΈ main.
Π€ΡΠ½ΠΊΡΠΈΠΈ main ΠΈ getline Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΠ±ΠΎΠΉ ΡΠ΅ΡΠ΅Π· ΠΏΠ°ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. Π getline Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ ΡΡΡΠΎΠΊΠΎΠΉ
int getline(char s[], int lim);
ΠΠ°ΠΊ ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ, Π΅Π΅ ΠΏΠ΅ΡΠ²ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ s Π΅ΡΡΡ ΠΌΠ°ΡΡΠΈΠ², Π° Π²ΡΠΎΡΠΎΠΉ, lim, ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ int. ΠΠ°Π΄Π°Π½ΠΈΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΌΠ°ΡΡΠΈΠ²Π° Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΈΠΌΠ΅Π΅Ρ ΡΠ΅Π»ΡΡ ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ. Π ΡΠ°ΠΌΠΎΠΉ getline Π·Π°Π΄Π°Π²Π°ΡΡ Π΄Π»ΠΈΠ½Ρ ΠΌΠ°ΡΡΠΈΠ²Π° s Π½Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠΊΠ°Π·Π°Π½ Π² main. Π§ΡΠΎΠ±Ρ Π²Π΅ΡΠ½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ·ΡΠ²Π°ΡΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅, getline ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ return ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ power. Π ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠΎΠ±ΡΠ°Π΅ΡΡΡ, ΡΡΠΎ getline Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° int, Π½ΠΎ ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΡΠΈ ΠΎΡΡΡΡΡΡΠ²ΠΈΠΈ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΎ ΡΠΈΠΏΠ΅ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅ΡΡΡ int, ΡΠΎ ΠΏΠ΅ΡΠ΅Π΄ getline ΡΠ»ΠΎΠ²ΠΎ int ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΡΡΠΈΡΡ.
ΠΠ΄Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π΄ΡΡΠ³ΠΈΠ΅ (ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ copy) Π½ΡΠΆΠ½Ρ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, Π½Π΅ Π²ΡΠ΄Π°Π²Π°Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΠ° ΠΌΠ΅ΡΡΠ΅ ΡΠΈΠΏΠ° ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π² copy ΡΡΠΎΠΈΡ void. ΠΡΠΎ ΡΠ²Π½ΠΎΠ΅ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π½Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ.
Π€ΡΠ½ΠΊΡΠΈΡ getline Π² ΠΊΠΎΠ½Π΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΠΎΠ³ΠΎ Π΅Ρ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ ΡΠΈΠΌΠ²ΠΎΠ» '\0' (null-ΡΠΈΠΌΠ²ΠΎΠ», ΠΊΠΎΠ΄ΠΈΡΡΠ΅ΠΌΡΠΉ Π½ΡΠ»Π΅Π²ΡΠΌ Π±Π°ΠΉΡΠΎΠΌ), ΡΡΠΎΠ±Ρ ΠΏΠΎΠΌΠ΅ΡΠΈΡΡ ΠΊΠΎΠ½Π΅Ρ ΡΡΡΠΎΠΊΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ². Π’ΠΎ ΠΆΠ΅ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ Π½ΡΠ»Π΅ΠΌ ΡΠΎΠ±Π»ΡΠ΄Π°Π΅ΡΡΡ ΠΈ Π² ΡΠ»ΡΡΠ°Π΅ ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ Π²ΡΠΎΠ΄Π΅
"hello\n"
Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π΄Π»Ρ Π½Π΅Π³ΠΎ ΡΠΎΡΠΌΠΈΡΡΠ΅ΡΡΡ ΠΌΠ°ΡΡΠΈΠ² ΠΈΠ· ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΡΡΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Ρ '\0' Π² ΠΊΠΎΠ½ΡΠ΅.
h Π΅ l l o \n \0
Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ %s Π² ΡΠΎΡΠΌΠ°ΡΠ΅ printf ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ, ΡΡΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ Π΅ΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ - ΡΡΡΠΎΠΊΠ° ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΠΎΡΠΎΡΠΌΠ»Π΅Π½Π½Π°Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌ Π²ΡΡΠ΅ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ. Π€ΡΠ½ΠΊΡΠΈΡ copy Π² ΡΠ²ΠΎΠ΅ΠΉ ΡΠ°Π±ΠΎΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠΏΠΈΡΠ°Π΅ΡΡΡ Π½Π° ΡΠΎΡ ΡΠ°ΠΊΡ, ΡΡΠΎ ΡΠΈΡΠ°Π΅ΠΌΡΠΉ Π΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ '\0', ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ½Π° ΠΊΠΎΠΏΠΈΡΡΠ΅Ρ Π½Π°ΡΡΠ΄Ρ Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΠΌΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ. (ΠΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ, ΡΡΠΎ '\0' Π½Π΅ Π²ΡΡΡΠ΅ΡΠ°Π΅ΡΡΡ Π²Π½ΡΡΡΠΈ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠ°.)
ΠΠΎΠΏΡΡΠ½ΠΎ ΡΡΠΎΠΈΡ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Π΄Π°ΠΆΠ΅ Ρ ΡΠ°ΠΊΠΎΠΉ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ ΠΌΡ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π΅ΠΌΡΡ Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠ²Π½ΡΠΌΠΈ ΡΡΡΠ΄Π½ΠΎΡΡΡΠΌΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ½Π° Π΄Π΅Π»Π°ΡΡ main, Π΅ΡΠ»ΠΈ Π²ΡΡΡΠ΅ΡΠΈΡΡΡ ΡΡΡΠΎΠΊΠ°, ΠΏΡΠ΅Π²ΡΡΠ°ΡΡΠ°Ρ Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ? Π€ΡΠ½ΠΊΡΠΈΡ getline ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π°Π΄Π΅ΠΆΠ½ΠΎ: Π΅ΡΠ»ΠΈ ΠΌΠ°ΡΡΠΈΠ² ΠΏΠΎΠ»ΠΎΠ½, ΠΎΠ½Π° ΠΏΡΠ΅ΠΊΡΠ°ΡΠ°Π΅Ρ ΠΏΠ΅ΡΠ΅ΡΡΠ»ΠΊΡ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Π° Π½ΠΎΠ²ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π½Π΅ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ»Π°. ΠΠΎΠ»ΡΡΠΈΠ² ΠΎΡ getline Π΄Π»ΠΈΠ½Ρ ΡΡΡΠΎΠΊΠΈ ΠΈ ΡΠ²ΠΈΠ΄Π΅Π², ΡΡΠΎ ΠΎΠ½Π° ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ MAXLINE, Π³Π»Π°Π²Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° main ΠΌΠΎΠ³Π»Π° Π±Ρ "ΠΎΡΠ»ΠΎΠ²ΠΈΡΡ" ΡΡΠΎΡ ΠΎΡΠΎΠ±ΡΠΉ ΡΠ»ΡΡΠ°ΠΉ ΠΈ ΡΠΏΡΠ°Π²ΠΈΡΡΡΡ Ρ Π½ΠΈΠΌ. Π ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ°Ρ ΠΊΡΠ°ΡΠΊΠΎΡΡΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΡΠ»ΡΡΠ°Ρ ΠΌΡ Π·Π΄Π΅ΡΡ ΠΎΠΏΡΡΠΊΠ°Π΅ΠΌ.
ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ getline Π½Π΅ ΠΌΠΎΠ³ΡΡ Π·Π°ΡΠ°Π½Π΅Π΅ ΡΠ·Π½Π°ΡΡ, ΡΠΊΠΎΠ»Ρ Π΄Π»ΠΈΠ½Π½ΡΠΌΠΈ Π±ΡΠ΄ΡΡ Π²Π²ΠΎΠ΄ΠΈΠΌΡΠ΅ ΡΡΡΠΎΠΊΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ getline Π΄Π΅Π»Π°Π΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π½Π° ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. Π Π²ΠΎΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ copy ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΊΠΎΠΏΠΈΡΡΠ΅ΠΌΡΡ ΡΡΡΠΎΠΊ ΠΈΠ·Π²Π΅ΡΡΠ½Ρ (ΠΈΠ»ΠΈ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ ΠΈΡ ΡΠ·Π½Π°ΡΡ), ΠΏΠΎΡΡΠΎΠΌΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π·Π΄Π΅ΡΡ Π½Π΅ Π½ΡΠΆΠ΅Π½.
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 1.16. ΠΠ΅ΡΠ΅ΠΏΠΈΡΠΈΡΠ΅ main ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ½Π° ΠΌΠΎΠ³Π»Π° ΠΏΠ΅ΡΠ°ΡΠ°ΡΡ ΡΠ°ΠΌΡΡ Π΄Π»ΠΈΠ½Π½ΡΡ ΡΡΡΠΎΠΊΡ Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ -Π»ΠΈΠ±ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ Π½Π° Π΅Π΅ ΡΠ°Π·ΠΌΠ΅Ρ.
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 1.17. ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΠ΅ΡΠ°ΡΠΈ Π²ΡΠ΅Ρ Π²Π²ΠΎΠ΄ΠΈΠΌΡΡ ΡΡΡΠΎΠΊ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΡ Π±ΠΎΠ»Π΅Π΅ 80 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ².
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 1.18. ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Π²ΠΎΠ΄ΠΈΠΌΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ Π·Π°ΠΌΠ΅Π½ΡΡΡ ΡΡΠΎΡΡΠΈΠ΅ ΠΏΠΎΠ΄ΡΡΠ΄ ΡΠΈΠΌΠ²ΠΎΠ»Ρ ΠΏΡΠΎΠ±Π΅Π»ΠΎΠ² ΠΈ ΡΠ°Π±ΡΠ»ΡΡΠΈΠΉ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΎΠ±Π΅Π» ΠΈ ΡΠ΄Π°Π»ΡΡΡ ΠΏΡΡΡΡΠ΅ ΡΡΡΠΎΠΊΠΈ.
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 1.19. ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ reverse(s), ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π² ΡΡΡΠΎΠΊΠ΅ s Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅. ΠΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅ Π΅Π΅ ΠΏΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΊΠ°ΠΆΠ΄ΡΡ Π²Π²ΠΎΠ΄ΠΈΠΌΡΡ ΡΡΡΠΎΠΊΡ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°Π΅Ρ Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅.
1.10 ΠΠ½Π΅ΡΠ½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈ ΠΎΠ±Π»Π°ΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ line, longest ΠΈ ΠΏΡΠΎΡΠΈΠ΅ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ main, ΠΈΠ»ΠΈ, ΠΊΠ°ΠΊ Π³ΠΎΠ²ΠΎΡΡΡ, Π»ΠΎΠΊΠ°Π»ΡΠ½Ρ Π² Π½Π΅ΠΉ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ Π²Π½ΡΡΡΠΈ main, Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΡΠΌΠΎ ΠΊ Π½ΠΈΠΌ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ Π½Π΅ ΠΌΠΎΠ³ΡΡ. Π’ΠΎ ΠΆΠ΅ Π²Π΅ΡΠ½ΠΎ ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ Π΄ΡΡΠ³ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, i Π² getline Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊ i Π² copy. ΠΠ°ΠΆΠ΄Π°Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΌΠΎΠΌΠ΅Π½Ρ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΠΈΡΡΠ΅Π·Π°Π΅Ρ ΠΏΠΎΡΠ»Π΅ Π²ΡΡ ΠΎΠ΄Π° ΠΈΠ· Π½Π΅Π΅. ΠΠΎΡ ΠΏΠΎΡΠ΅ΠΌΡ ΡΠ°ΠΊΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΡΠ»Π΅Π΄ΡΡ ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠΎΠ², Π½Π°Π·ΡΠ²Π°ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ. (Π Π³Π»Π°Π²Π΅ 4 ΠΎΠ±ΡΡΠΆΠ΄Π°Π΅ΡΡΡ ΠΊΠ»Π°ΡΡ ΠΏΠ°ΠΌΡΡΠΈ static, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ ΡΠΎΡ ΡΠ°Π½ΡΡΡ ΡΠ²ΠΎΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΊΠ°Ρ ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠ·ΠΎΠ²Π°ΠΌΠΈ.)
Π’Π°ΠΊ ΠΊΠ°ΠΊ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠ±ΡΠ°Π·ΡΡΡΡΡ ΠΈ ΠΈΡΡΠ΅Π·Π°ΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Ρ Π²Ρ ΠΎΠ΄ΠΎΠΌ Π² ΡΡΠ½ΠΊΡΠΈΡ ΠΈ Π²ΡΡ ΠΎΠ΄ΠΎΠΌ ΠΈΠ· Π½Π΅Π΅, ΠΎΠ½ΠΈ Π½Π΅ ΡΠΎΡ ΡΠ°Π½ΡΡΡ ΡΠ²ΠΎΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΎΡ Π²ΡΠ·ΠΎΠ²Π° ΠΊ Π²ΡΠ·ΠΎΠ²Ρ ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ Π·Π°Π½ΠΎΠ²ΠΎ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π½ΠΎΠ²ΠΎΠΌ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΡΠ»ΠΈ ΡΡΠΎΠ³ΠΎ Π½Π΅ Π΄Π΅Π»Π°ΡΡ, ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ "ΠΌΡΡΠΎΡ".
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π²Π½Π΅ΡΠ½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΠΊ ΠΊΠΎΡΠΎΡΡΠΌ ΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΡΡΡ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΏΠΎ ΠΈΡ ΠΈΠΌΠ΅Π½Π°ΠΌ ΠΈΠ· Π»ΡΠ±ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ. (ΠΡΠΎΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ΅Π½ ΠΎΠ±Π»Π°ΡΡΠΈ COMMON Π² Π€ΠΎΡΡΡΠ°Π½Π΅ ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π² ΡΠ°ΠΌΠΎΠΌ Π²Π½Π΅ΡΠ½Π΅ΠΌ Π±Π»ΠΎΠΊΠ΅ Π² ΠΠ°ΡΠΊΠ°Π»Π΅.) Π’Π°ΠΊ ΠΊΠ°ΠΊ Π²Π½Π΅ΡΠ½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΠΏΠΎΠ²ΡΠ΅ΠΌΠ΅ΡΡΠ½ΠΎ, ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΠΌΠ΅ΡΡΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π΄Π»Ρ ΡΠ²ΡΠ·ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ ΠΏΠΎ Π΄Π°Π½Π½ΡΠΌ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²Π½Π΅ΡΠ½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ, Π° Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ ΠΈ ΠΈΡΡΠ΅Π·Π°ΡΡ Π½Π° ΠΏΠ΅ΡΠΈΠΎΠ΄ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠ²ΠΎΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΠ½ΠΈ ΡΠΎΡ ΡΠ°Π½ΡΡΡ ΠΈ ΠΏΠΎΡΠ»Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΈΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ²ΡΠΈΡ .
ΠΠ½Π΅ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π°, ΠΏΡΠΈΡΠ΅ΠΌ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·, Π²Π½Π΅ ΡΠ΅ΠΊΡΡΠ° Π»ΡΠ±ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ; Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π΅ΠΉ Π±ΡΠ΄Π΅Ρ Π²ΡΠ΄Π΅Π»Π΅Π½Π° ΠΏΠ°ΠΌΡΡΡ. ΠΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π° Π²ΠΎ Π²ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΡΡ , ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΠΎΡΡΡ Π΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ. ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ ΡΠΈΠΏΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ. ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ²Π½ΡΠΌ, Π² Π²ΠΈΠ΄Π΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ extern, ΠΈΠ»ΠΈ Π½Π΅ΡΠ²Π½ΡΠΌ, ΠΊΠΎΠ³Π΄Π° Π½ΡΠΆΠ½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΠΈΠ· ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°. Π§ΡΠΎΠ±Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅, ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΠ΅ΡΠ°ΡΠΈ ΡΠ°ΠΌΠΎΠΉ Π΄Π»ΠΈΠ½Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ line, longest ΠΈ max Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²Π½Π΅ΡΠ½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ . ΠΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Π²ΡΠ·ΠΎΠ²Π°Ρ , ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡΡ ΠΈ ΡΠ΅Π»Π°Ρ Π²ΡΠ΅Ρ ΡΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠΉ.
#include βΉstdio.hβΊ
#define MAXLINE 1000 /* ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ Π²Π²ΠΎΠ΄ΠΈΠΌΠΎΠΉ ΡΡΡΠΎΠΊΠΈ */
int max; /* Π΄Π»ΠΈΠ½Π° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΠΈΠ· ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅Π½Π½ΡΡ ΡΡΡΠΎΠΊ */
char line[MAXLINE]; /* ΡΠ΅ΠΊΡΡΠ°Ρ ΡΡΡΠΎΠΊΠ° */
char longest[MAXLINE]; /* ΡΠ°ΠΌΠ°Ρ Π΄Π»ΠΈΠ½Π½Π°Ρ ΡΡΡΠΎΠΊΠ° */
int getline(void);
void copy(void);
/* ΠΏΠ΅ΡΠ°ΡΡ ΡΠ°ΠΌΠΎΠΉ Π΄Π»ΠΈΠ½Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ: ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ Π²Π΅ΡΡΠΈΡ */
main()
{
int len;
extern int max;
extern char longest[];
max = 0;
while ((len = getline()) βΊ 0)
if (len βΊ max) {
max = len;
copy();
}
if (max βΊ 0) /* Π±ΡΠ»Π° Ρ ΠΎΡΡ Π±Ρ ΠΎΠ΄Π½Π° ΡΡΡΠΎΠΊΠ° */
printf("%s", longest);
return 0;
}
/* getline: ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ Π²Π΅ΡΡΠΈΡ */
int getline(void)
{
int c, i;
extern char line[];
for (i = 0; i βΉ MAXLINE-1 && (c=getchar()) != EOF && c!= '\n'; ++i)