简明现代魔法 -> C/C++ -> C 程序设计:字符数组

C 程序设计:字符数组

2010-02-24

字符数组是 C 语言中最常用的数组类型。我们需要了解操作该数组的一些函数。

问题:编写一个程序,该程序读入一组文本行,并把最长的文本行打印出来。

该算法的基本框架如下:

while(未处理的行)
if(该行比已处理的最长的行还要长)
	保存该行
    保存该行的长度
打印最长的行  

可以看出,程序分成几个功能部分:读入新行,测试读入的行(长度等),保存该行等。

#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 && c != '\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() 函数把字符 '\0' (即空字符,其值为0)插入到它创建的数组的末尾,以标记字符串的结束。

printf() 函数中的格式 %s 规定,对应的参数必须是以下列格式表示的字符串:

H e l l o \n \0  

所以 copy() 函数需要在字符串后面加'\0'来标记字符串结束。

随机文章推荐
网站分类


注:如需转载本文,请注明出处(原文链接),谢谢。更多精彩内容,请进入简明现代魔法首页。

进入新博客
喜欢本文,就分享它吧
给我留言
您的名字:
您的邮件:
您的网站:


 

copyright © 2009 简明现代魔法    学习、分享、进步

power by Gonn 感谢所有关心和支持本站的朋友们