北京企业网站建设公司,访问网站 403.14错误,优化网站的步骤案列,网站制作 数据库1.9 字符数组 一、字符数组概述二、练习 一、字符数组概述
所谓字符数组#xff0c;就是char类型的数组#xff0c;比如 char a[]#xff0c;是C语言中最常用的数组类型#xff0c;先看一个程序
#include stdio.h
#define MAXLINE 1000 //最大行长度限制
int get… 1.9 字符数组 一、字符数组概述二、练习 一、字符数组概述
所谓字符数组就是char类型的数组比如 char a[]是C语言中最常用的数组类型先看一个程序
#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;
}// 读取一行数据到数组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;
}// 返回值类型为void显式说明该函数不返回任何值
void copy(char to[], char from[]) {int i;i 0;while ((to[i] from[i]) ! \0)i;
}以上的程序功能就是从输入的多行文本中找出最长的一行文本进行打印。值的说明的是
getline函数把字符 ‘\0’ (即空字符其值为0可以用 printf(“%d%c%d”, ‘\0’, ‘\0’, ‘\0’); 体会一下) 插入到数组的末尾以标记字符串的结束。这一约定已被C语言采用当在C语言程序中出现类似于 “hello\0” 的字符串常量时它将以字符数组的形式存储数组的各元素分别存储字符串的各个字符并以’\0’标志字符串的结束。printf函数的%s规定对应的参数必须是以这种形式表示的字符串
#include stdio.hmain()
{printf(%d%c%d\n, \0, \0, \0);char chars[3];chars[0] 0;chars[1] 1;//chars[2] 2;chars[2] \0;printf(%s, chars);return 0;
}二、练习
修改打印最长文本行的程序的主程序main, 使之可以打印任意长度的输入行并尽可能多的打印文本。
为了便于测试把MAXLINE 改成10 根据上述分析显然有两个问题 ① 输出的长度最大是9 ② 打印的数组出现未知值 这就是这个题目要解决的问题打印任意长度打印正确的数组
修改点其他与原程序相同
main函数中printf(%d, %s, len, line);
getline函数重写
int getline(char s[], int lim) {int c, i, j;j 0; /* s数组的下标0~lim-1可保证数组不越界 */for (i 0; (c getchar()) ! EOF c ! \n; i)if (j lim - 2) {s[j] c;j;}if (c \n) {s[j] c;j;i;}s[j] \0;return i; // i表示实际输入的字符数
}编写一个程序打印长度大于80个字符的所有输入行。
#include stdio.h
#define MAXLINE 1000 //最大行长度限制
#define MAXCHAR 80 // 行字符数
int getline(char line[], int maxline); // 读取一行// 编写一个程序打印长度大于80个字符的所有输入行。
main()
{int len; // 当前行长度char line[MAXLINE]; // 保存当前输入行while ((len getline(line, MAXLINE)) 0) {if (len MAXCHAR) {printf(%d, %s, len, line);}}return 0;
}// 读取一行数据到数组s中并返回该行的长度
int getline(char s[], int lim) {int c, i, j;j 0; /* s数组的下标0~lim-1可保证数组不越界 */for (i 0; (c getchar()) ! EOF c ! \n; i)if (j lim - 2) {s[j] c;j;}if (c \n) {s[j] c;j;i;}s[j] \0;return i; // i表示实际输入的字符数
}编写一个程序删除每个输入行末尾的空格及制表符并删除完全是空格的行。
#include stdio.h
#define MAXLINE 10 //最大行长度限制
int getline(char line[], int maxline); // 读取一行
int remove(char line[]); // 删除行尾空格和制表符、删除完全是空格的行并返回其他字符占有数组的长度// 编写一个程序删除每个输入行末尾的空格及制表符并删除完全是空格的行。
main()
{int len; // 当前行长度char line[MAXLINE]; // 保存当前输入行while ((len getline(line, MAXLINE)) 0) {if(remove(line) 0)printf(%d, %s, len, line);}return 0;
}// 读取一行数据到数组s中并返回该行的长度
int getline(char s[], int lim) {int c, i, j;j 0; /* s数组的下标0~lim-1可保证数组不越界 */for (i 0; (c getchar()) ! EOF c ! \n; i)if (j lim - 2) {s[j] c;j;}if (c \n) {s[j] c;j;i;}s[j] \0;return i; // i表示实际输入的字符数
}// 删除行尾空格和制表符、删除完全是空格的行并返回其他字符占有数组的长度
int remove(char s[]) {int i;i 0;while (s[i] ! \n)i;--i;// 从\n前的一个字符开始往前退// 如果是空格或制表符继续往前退// 如果不是空格和制表符或者字符串已经遍历完i0,退出循环while (i0 (s[i] || s[i] \t))--i;return i;
}编写函数reverse(s)将字符串s中的字符顺序颠倒过来。使用该函数编写一个程序每次颠倒一个输入行中的字符顺序。
#include stdio.h
#define MAXLINE 10 //最大行长度限制
int getline(char line[], int maxline); // 读取一行
void reverse(char line[]); // 反转字符串
// 编写函数reverse(s)将字符串s中的字符顺序颠倒过来。使用该函数编写一个程序每次颠倒一个输入行中的字符顺序。
main()
{int len; // 当前行长度char line[MAXLINE]; // 保存当前输入行while ((len getline(line, MAXLINE)) 0) {reverse(line);printf(%d, %s, len, line);}return 0;
}// 读取一行数据到数组s中并返回该行的长度
int getline(char s[], int lim) {int c, i, j;j 0; /* s数组的下标0~lim-1可保证数组不越界 */for (i 0; (c getchar()) ! EOF c ! \n; i)if (j lim - 2) {s[j] c;j;}if (c \n) {s[j] c;j;i;}s[j] \0;return i; // i表示实际输入的字符数
}void reverse(char s[]) {int i, j; // 两个游标i从数组的后面往前移j从前往后移char temp; // 临时变量用于交换两个数组元素i 0;while (s[i] ! \0)i;--i;if (s[i] \n)--i;j 0;while (j i) {temp s[j];s[j] s[i];s[i] temp;--i;j;}
}