现代方法第15章第三节的程序

#include <string.h>
#include <stdio.h>

#ifndef LINE_H
#define LINE_H
void clear_line(void);
void add_word(const char *word);
int space_remaining(void);
void write_line(void);
void flush_line(void);
#endif



#ifndef WORD_H
#define WORD_H
void read_word(char *word,int len);
#endif

#define MAX_WORD_LEN 20
#define MAX_LINE_LEN 60
char line[MAX_LINE_LEN+1];
int line_len = 0;
int num_words = 0;

main()
{
char word[MAX_WORD_LEN+2];
int word_len;

clear_line();
for (;;){
    read_word(word,MAX_WORD_LEN+1);
    word_len = strlen(word);
    if (word_len == 0){
              flush_line();
              return 0;
    }    
    if (word_len > MAX_WORD_LEN)
      word[MAX_WORD_LEN] = '*';
    if (word_len + 1 > space_remaining()) {
      write_line();
      clear_line();
    }
    add_word(word);


}
}


///////////line.c////////////////////////////////////////////////////////////////i
void clear_line(void){
    line[0] = '\0';
    line_len = 0;
    num_words = 0;

}

void add_word(const char *word)
{
    if (num_words > 0) {
        line[line_len] = ' ';
        line[line_len+1] = '\0';
        line_len++;
    }
    strcat(line,word);
    line_len += strlen(word);
    num_words++;
    
}
int space_remaining(void){
    return MAX_LINE_LEN - line_len;
}
void write_line(void)
{
    int extra_spaces,spaces_to_insert,i,j;
    extra_spaces = MAX_LINE_LEN-line_len;
    for(i=0;i<line_len;i++){
      if(line[i] != ' ')
        putchar(line[i]);
      else {
          spaces_to_insert = extra_spaces / (num_words - 1);
          for (j = 1; j<=spaces_to_insert +1; j++)
             putchar(' ');
          extra_spaces -= spaces_to_insert;
          num_words--;
      }
}
putchar ('\n');    
}
void flush_line(void)
{
    if (line_len>0)
      puts(line);
}


/////word.c/////////////////////////////////////////////////////////////
int read_char(void)
{
    int ch = getchar ();
    
    if (ch == '\n' || ch == '\t')
      return ' ';
    return ch;
}

void read_word(char *word, int len)
{
    int ch,pos = 0;
    while ((ch = read_char()) == ' ')
        ;
    
    while (ch != ' ' && ch != EOF) {
        if (pos<len)
          word[pos++] = ch;
        ch = read_char();
    }
    
    word[pos] = '\0';
}
View Code

 

posted @ 2017-09-30 14:13  扫驴  阅读(135)  评论(0编辑  收藏  举报