c语言程序设计第五版课后答案谭浩强 第六章习题答案 (5)

【代码实现】

#include<stdio.h> int main() { char s[1024] = {0}; scanf("%s", s); int len = strlen(s); // 转换 for (int i = 0; i < len; ++i) { // 如果是小写字母(大写字母出来类似): // 1. 先用s[i] - \'a\'计算出s[i]是26个字母中从前往后数的第几个 // 2. 再用26 - (s[i]- \'a\') - 1 转换为26个字母中从后往前数的第几个 // 3. 在2的结果上加上\'a\',即转换为对应从后往前的第几个字母 if (s[i] >= \'a\' && s[i] <= \'z\') s[i] = \'a\' + 26 - (s[i]-\'a\')-1; else if (s[i] >= \'A\' && s[i] <= \'Z\') s[i] = \'A\' + 26 - (s[i] - \'A\')-1; } printf("%s", s); return 0; }

【结果截屏】

c语言程序设计第五版课后答案谭浩强 第六章习题答案

13. 编一程序,将两个字符串连接起来,不要用strcat函数

【答案解析】

直接将s2中的字符逐个拷贝到s1的末尾即可,用户需要保证s1中能存的下s2中的字符

获取s1末尾的位置

将s2中的字符逐个拷贝到s1中

【代码实现】

#include<stdio.h> int main() { char s1[100] = {0}; char s2[50] = { 0 }; int index1 = 0, index2 = 0; printf("请输入字符串s1:"); scanf("%s", s1); printf("请输入字符串s2:"); scanf("%s", s2); printf("将s2拼接在s1之后: "); // 1. 找到s1的末尾 while (\'\0\' != s1[index1]) index1++; // 2. 将s2中的字符逐个往s1之后拼接 while (s1[index1++] = s2[index2++]); printf("%s\n", s1); return 0; }

【结果截屏】

c语言程序设计第五版课后答案谭浩强 第六章习题答案

14. 编写一个程序,将连个字符串s1和s2比较,如果s1 > s2,输出一个整数;若s1 = s2,输出0;若s1 < s2,输出一个负数。不要用strcpy函数。两个字符串用gets函数读入。输出的正数或负数的绝对值应是相比较的两个字符串相对应字符的ASCII码的差值。例如,"A"和“C”相比,由于"A" < "C",应输出负数,同时由于‘A’与‘C’的ASCII码差值为2,因此应输出"-2"。同理:“And”和"Aid"相比较,根据第2个字符比较结果,"n"比"i"大5,因此应输出"5"。

【答案解析】

字符串比较规则:从前往后逐个字符进行比较,相等时继续往后,不相等时返回该位置两个字符差值。

【代码实现】

#include <stdio.h> int main() { int ret = 0; int index = 0; char s1[100] = { 0 }; char s2[100] = { 0 }; printf("请输入s1:"); gets(s1); printf("请输入s2:"); gets(s2); // 将s1和s2中的字符从前往后逐个进行比较,相等继续往后, // 不相等时ret中结果不为0,!ret则为0 循环结束 // 如果一个走到末尾,一个未走到末尾 ret也不为0, !ret为0,循环结束 // 如果两个字符串相等,同时达到末尾,循环结束 while (!(ret = s1[index] - s2[index]) && \'\0\' != s1[index] && \'\0\' != s2[index]) { ++index; } printf("%d\n", ret); return 0; }

【结果截屏】

c语言程序设计第五版课后答案谭浩强 第六章习题答案

15. 编写一个程序,将字符数组s2中的全部字符复制到字符数组s1中,不用strcpy函数。复制时,‘\0’也要赋值过去。\'\0\'之后的字符不复制。

【答案解析】

首先必须保证s1能否放的下s2中的字符,然后将s2中的每个字符逐个搬移到s1中即可。

【代码实现】

#include<stdio.h> int main() { char s1[100] = { 0 }; char s2[50] = { 0 }; int index1 = 0, index2 = 0; printf("请输入字符串s2:"); scanf("%s", s2); printf("将s2拷贝到s1中, s1现在为: "); // 将s2[index2]位置字符拷贝到s1[index]位置, // 然后以s1[index1]的值作为循环条件判断是否拷贝到s2的末尾 while (s1[index1++] = s2[index2++]); printf("%s\n", s1); return 0; }

【结果截屏】

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwyyyz.html