C|C Primer Plus(第6版)第十一章编程练习答案(待写)

11.13编程练习 1.设计并测试一个函数,从输入中获取下n个字符(包括空白符、制表符、换行符),把结果储存在一个数组里,它的地址被传递作为一个参数。

#include void getInput(char * arr, int size); int main(void) { char arr[10]; getInput(arr, 10); puts(arr); return 0; } void getInput(char * arr, int size) { char ch; int count = 0; while (((ch = getchar()) != '\n') && count < size) { *arr++ = ch; count++; }return; }

2.修改变成练习1的函数,在n个字符后停止,或在读到第1个空白符、制表符、或换行符时停止,哪个先遇到哪个停止。不能只使用scanf()。
#include #include void getInput(char * arr, int size); int main(void) { char arr[10]; getInput(arr, 10); puts(arr); return 0; } void getInput(char * arr, int size) { char ch; int count = 0; while ((!isblank(ch = getchar())) && count < size) { *arr++ = ch; count++; }return; }

3.设计并测试一个函数,从一行输入中把一个单词读入一个数组中,并丢弃输入行中的其余字符。该函数应该跳过第1个非空白字符前面的所有空白。将一个
单词定义为没有空白、制表符或换行符的字符序列。
#include #include void getWord(char * arr); int main(void) { char arr[10]; getWord(arr); puts(arr); return 0; } void getWord(char * arr) { char ch; while (!isblank(ch=getchar())) *arr++ = ch; // 清空缓冲 while (getchar() != '\n') continue; return; }

【C|C Primer Plus(第6版)第十一章编程练习答案(待写)】4.设计并测试一个函数,它类似编程练习3的描述。只不过它接受第2个参数指明可读取的最大字符数。
#include #include void getWord(char * arr, int size); int main(void) { char arr[10]; getWord(arr, 3); puts(arr); return 0; } void getWord(char * arr, int size) { char ch; int count = 0; while ((!isblank(ch=getchar())) && count < size) { *arr++ = ch; count++; printf("count : %d \n", count); } // 清空缓冲 while (getchar() != '\n') continue; return; }

5.设计并测试一个函数,搜索第1个函数形参指定的字符串,在其中查找第二个函数指定的字符首次出现的位置。如果成功,该函数返回指向该字符的指针,如果在字符串中未找到指定字符,则返回空指针(该函数的功能与strchr()函数相同)。在一个完整的程序中测试函数,使用一个循环给函数提供输入值。
#include #include char * my_strchar(char * str, char * val); int main(void) {char * str1 = "abcdef"; char * str2 = "bcd"; my_strchar(str1, str2); char * get_p = my_strchar(str1, str2); puts(get_p); return 0; }char * my_strchar(char * str, char * val) { char * p_str = str; char * p_val = val; char * ret; int isEqual = 0; // 不相等为0 相等为1while ((*p_str != '\0') && (*p_val != '\0')) { if (*p_str == *p_val) { isEqual = 1; if (isEqual == 1) { p_val++; p_str++; } } else str }if (isEqual == 0) ret = NULL; return ret; }

6.编写一个名为is_within()函数,接受一个字符和一个指向字符串的指针作为两个函数形参。如果指定字符在字符串中,该函数返回一个非零值(即为真)。否则,返回0(即为假)。在一个完整的程序中测试该函数,使用一个循环给函数提供输入值。
#include #include int is_within(char ch, char *str); int main(void) { char * str = "abcdef"; char ch; int state = 0; while (scanf("%c", &ch)== 1 ) { while (getchar() != '\n') continue; state = is_within(ch, str); printf("%d", state); printf("¥¥¥¥¥¥¥¥ \n"); }return 0; } int is_within(char ch, char *str) { bool is_in = false; while (*str) // 括号内不能写成(*str++)因为副作用会完成 { if (ch == *str) is_in = true; str++; }return is_in; }

7.strncpy(s1, s2, n)函数把s2中的n个字符拷贝至s1中,截断s2,或者有必要的话在末尾添加空字符。如果s2的长度是n或者多余n,目标字符串不能以空字符结尾。该函数返回s1。自己编写这样一个函数,名为mystrncpy()。在一个完整的程序中测试该函数,使用一个循环给函数提供输入值。
void mystrncpy(char *target, char *source, int num) {for (int i = 0; i < num; i++) target[i] = source[i]; return 0; }

8.编写一个名为string_in()的函数,接受两个指向字符串的指针作为参数。如果第二个字符串中包含第一个字符串,该函数将返回第一个字符串的开始的地址。例如,string_in(“hats”,“act)将返回hats中a的地址。否则,该函数返回空指针。在一个完整的程序中测试该函数。使用一个循环给函数提供输入值。
9.编写一个函数,把字符串中的内容用其反序字符串代替。在一个完整程序中测试该函数,使用一个循环给函数提供输入值。
#include #include #include char * Reverse(char *str); int main(void) { char * str = "abcdefg"; char * rel = Reverse(str); puts(rel); return 0; }char *Reverse(char *str) { int n = strlen(str); char *temp = (char*)malloc(sizeof(char) * (n + 1)); for (int i = 1; *str; i++) { temp[n-i] = *str++; }return temp; }

10.编写一个函数接受一个字符串作为参数,并删除字符串中的空格。在一个程序中测试该函数,使用循环读取输入行,直到用户输入一行空行。该程序应该用函数只每个输入的字符串,并显示处理后的字符串。
char *delete_space(char *str) { char temp[SIZE]; int i = 0; int j = 0; for (i; i < SIZE; i++) { if (str[i] != SPACE) { temp[j++] = str[i]; } }return temp; }

11.编写一个函数,读入10个字符串或者读到EOF时停止。该程序为用户提供一个有5个选项的菜单:打印源字符串列表、以ASCII中的顺序打印字符串、按长度递增顺序打印字符串、按字符串中的第一个单词的长度打印字符串、退出。菜单可以循环显示,除非用户选择退出选项。当然,该程序要能真正完成菜单各中选项的功能。
12.编写一个程序,读取输入,直到读到EOF,报告读入的单词数、大写字母数,小写字母数、标点符号数和数字字符数。使用ctype.h头文件中的函数。
13.编写一个程序,反序显示命令行参数的单词。例如,命令行参数是see you later,该程序应该打印later see you。
14.编写一个通过命令行运行的程序计算幂。第1个命令行参数是double类型的数,作为幂的底数,第2个参数是整数,作为幂的指数。
15.使用字符分类函数实现atoi()函数。如果输入的字符串不是纯数字,该函数返回0。
16.编写一个程序读取输入,直到读取文件结尾,然后把字符串打印出来。该程序识别和实现下面的命令行参数:
-p 按原样打印
-u 把输入全部转换成大写
-l 把输入全部转换成小写
如果没有命令行参数,则让程序像是使用了-p参数那样运行。

    推荐阅读