Cプログラミング言語(第2版)1-16
1-16最長テキスト行を印刷するプログラムのメインプログラムmainを変更し、任意の長さの入力行の長さを印刷し、できるだけ多くのテキストを印刷できるようにする.
考え方のポイントは、一度に入力した文字列の長さがMAXLINEを超えた場合、lenはMAXLINE-1に等しく、この場合line[len-1]!='0',そうでなければline[len-1]='0'.なぜなら、文字列がメモリに格納されると'0'で終わるからです.
#include <stdio.h>
#define MAXLINE 10
int getline(char line[], int maxline);
void copy(char to[],char from[]);
int main()
{
char line[MAXLINE];//
char longest[MAXLINE];//
char temp[MAXLINE];
int len;//
int max;//
int prevmax; //
int getmore;// , MAXLINE
max=0;
prevmax =0 ;
getmore =0;
// MAXLINE, MAXLINE while
while((len = getline(line,MAXLINE))>0)
{
if(line[len-1]!='
')// line[len-1]!='
'
{
// MAXLINE
if(getmore==0)
{
copy(temp,line);
}
prevmax+=len;
if(max<prevmax)///
max=prevmax;
getmore=1;
}
else// MAXLINE
{
if(getmore==1){
prevmax +=len;
if(max<prevmax){
max = prevmax;
copy(longest,temp);
longest[MAXLINE - 2] = '
';//????????
}
getmore=0;
}
else if(max<len)
{
max=len;
copy(longest,line);
}
prevmax=0;
}
}
if(max > 0)
{
printf("%s", longest);
printf("len = %d
", max);
}
return 0;
}
int getline(char s[],int lim)
{
int c,i;
for(i=0;i<lim-1 && ((c=getchar())!=EOF && c!='
'); ++i)
s[i] = c;
if(c == '
') //??
{
s[i] =c;
++i;
}
s[i] = '\0';
return i;// ???
}
void copy(char to[], char from[])
{
int i;
i =0;
while((to[i]=from[i])!='\0')
i++;
}
考え方のポイントは、一度に入力した文字列の長さがMAXLINEを超えた場合、lenはMAXLINE-1に等しく、この場合line[len-1]!='0',そうでなければline[len-1]='0'.なぜなら、文字列がメモリに格納されると'0'で終わるからです.