/*编写一程序P137.C实现以下功能通过键盘输入两个姓名(约定均为汉字且最多4个汉字),判断并输出二者是否同姓。编程可用素材:printf("请输入姓名1: ");printf("请输入姓名2: ");printf("n“…”与“…”同姓。n"…);printf("n“…”与“…”不同姓。n"…);程序的运行效果应类似地如图1和图2所示,图1和图2中的红色部分是从键盘输入的内容。请输入姓名1: 张李秀吉
请输入姓名2: 张三“张李秀吉”与“张三”同姓。
图1 程序运行效果示例请输入姓名1: 李四菊
请输入姓名2: 张三丰“李四菊”与“张三丰”不同姓。
图2 程序运行效果示例
*/#include <stdio.h>
#include <string.h>#define N 9void test01(char n1[],char n2[]);
void test02(char n1[], char n2[]);int main(void)
{char name1[N];char name2[N];printf("请输入姓名1: ");scanf("%s", name1);printf("请输入姓名2: ");scanf("%s", name2);/* printf("%d", strlen(name1)); // 张李秀吉 === 8printf("%d", strlen(name2)); // 张三 === 4putchar('n');for (int i = 0; i < strlen(name1);i++){printf("%c ", name1[i]);}for (int i = 0; i < strlen(name2);i++){printf("%c ", name2[i]);} */// /* // 这里,取第一个字符来比较,它是取出来的第一个字符吗?// 第一个字符是汉字字符,是一样的吗?// */// if (name1[0] == name2[0])// {// printf("n“%s”与“%s”同姓。n", name1, name2);// }// else// {// printf("n“%s”与“%s”不同姓。n", name1, name2);// }// test01(name1, name2); // 这个判断是有问题的test02(name1, name2);return 0;
}/* 应该判断第一个完整的汉字,两个字节"张"的区位码:D5C5"章"的区位码:D5C2取测试数据:“张三” “章三”如果使用方法一test01(),则同姓如果使用方法二test02(),则不同姓*/// 只判断了一个字节,不足一个汉字,但汉字有可能刚好第一个字节一样
void test01(char n1[],char n2[])
{// 只判断了一个字符【半个中文,没有这样的表示方式,只是为了方便理解,暂时这样表述】if (n1[0] == n2[0]){printf("n“%s”与“%s”同姓。n", n1, n2);}else{printf("n“%s”与“%s”不同姓。n", n1, n2);}
}// 判断了两个字节,足够一个汉字,一定可以区别每一个汉字
void test02(char n1[],char n2[])
{// 判断了一个中文if (n1[0] == n2[0] && n1[1] == n2[1]){printf("n“%s”与“%s”同姓。n", n1, n2);}else{printf("n“%s”与“%s”不同姓。n", n1, n2);}
}
/*编写一程序P219.C实现以下功能从键盘读入一行字符(约定:字符数≤127字节),将其中的数字字符以及这些数字字符的数量在屏幕上显示,注意:要求先显示这些数字字符的数量。编程可用素材:printf("Please input string: ");printf("nshu zi ge shu wei: …);printf("nshu zi wei: …);程序的运行效果应类似地如图1所示,图1中的gfaskl45623cvsac,53dwafl faf32535as3bf0是从键盘输入的内容。Please input string: gfaskl45623cvsac,53dwafl faf32535as3bf0shu zi ge shu wei: 14
shu zi wei: 45623533253530
图1 程序运行效果示例
*/#include <stdio.h>
#include <string.h>
#define N 127int main(void)
{char str[N];char strData[N] = {'