把_strlwr(a.sName);改成_strlwr_s版本
时间: 2023-11-17 12:06:38 浏览: 163
将字符串转换为小写字母的函数 `_strlwr(a.sName);` 改写成 `_strlwr_s` 的版本,应该如下所示:
```c++
_strlwr_s(a.sName, sizeof(a.sName));
```
其中,第一个参数是要转换的字符串的指针,第二个参数是字符串的大小(以字节为单位)。该函数将字符串中的所有字母转换为小写字母。与 `strcpy_s` 类似,`_strlwr_s` 也可以避免缓冲区溢出的问题。
相关问题
void FindByNumb() { int nNumb; printf("请输入要查的工号:"); scanf_s("%d", &nNumb); SInfo* p = FindNumb(nNumb); if (p) { printf("%d\t%s\t%g\n", p->nNumb, p->sName, p->fSala); } else { puts("工号不存在!"); } system("pause"); } void FindByName() { char sName[20], str[20]; printf("请输入要查的姓名:"); scanf_s("%s", sName, (int)sizeof(sName)); int i = -1; SInfo* p = GetData(); size_t n = GetCount(); int sum = 0; _strlwr(sName); while (++i < n) { strcpy(str, p[i].sName); _strlwr(str); if (strstr(str, sName)) printf("%d\t%s\t%g\n",p[i].nNumb, p[i].sName, p[i].fSala); ++sum; } printf("总共有%d条匹配的记录\n", sum); system("pause"); } void FindBySalary() { float fMin, fMax; printf("请输入一个工资段(两个小数):"); scanf_s("%f%f", &fMin, &fMax); if (fMin > fMax) { float t = fMin; fMin = fMax; fMax = t; } SInfo* p = GetData(); size_t n = GetCount(); int sum = 0; while (n--) { if (p->fSala >= fMin && p->fSala <= fMax) { printf("%d\t%s\t%g\n", p->nNumb, p->sName, p->fSala); ++sum; } ++p; printf("总共有%d条匹配的数据\n", sum); system(":pause"); } } int FindMenu() { system("cls"); puts("\n\n\t\t********************************"); puts("\t\t*\t1、按工号查找 *"); puts("\t\t*\t2、按姓名查找 *"); puts("\t\t*\t3、按工资段查找 *"); puts("\t\t*\t0、返回主菜单 *"); puts("\t\t********************************"); printf("\t\t请选择:"); int i = 0; scanf_s("%d", &i); switch (i) { case 1: FindByNumb(); break; case 2: FindByName(); break; case 3: FindBySalary(); break; } return i; }
这段代码实现了一个简单的员工信息查找功能,包括按照工号、姓名、工资段进行查找。具体来说,代码实现了以下几个函数:
1. `FindByNumb()`: 按工号查找函数,通过输入要查找的工号,调用`FindNumb()`函数查找该工号对应的员工信息,如果找到则输出该员工信息,否则输出工号不存在。
2. `FindByName()`: 按姓名查找函数,通过输入要查找的姓名,遍历所有员工信息,将姓名转换为小写字母,然后在员工姓名中查找是否包含该字符串,如果包含则输出该员工信息,并统计匹配的员工数量。
3. `FindBySalary()`: 按工资段查找函数,通过输入要查找的工资段,遍历所有员工信息,如果员工的工资在该工资段内,则输出该员工信息,并统计匹配的员工数量。
4. `FindMenu()`: 查找功能菜单函数,通过调用该函数,可以在菜单中选择按照工号、姓名、工资段查找员工信息,或者返回主菜单。
这些函数共同实现了一个简单的员工信息查找功能,可以根据需要进行扩展和优化。
printf(%s\n%s\n",strlwr(a),strupr(a));为什么输出结果一样
这是因为在C语言中,字符串中的小写字母和大写字母的ASCII码值只相差32,所以在转换大小写时只需要将小写字母的ASCII码值减去32或将大写字母的ASCII码值加上32即可。因此,对于一个字符串,如果其中所有的字母已经是小写或大写,那么无论是使用`strlwr()`函数还是`strupr()`函数,输出结果都是一样的。
阅读全文