用c语言写一个从键盘接收一个字符串长度在80以内 然后将自身逆置后
时间: 2023-05-27 07:06:59 浏览: 166
南开一百题最终word版
以下是用 C 语言实现从键盘接收一个字符串并将其逆置的程序:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 80
int main() {
char str[MAX_LEN + 1]; // +1 是为了存放字符串的结束符 '\0'
printf("请输入一个长度不超过 %d 的字符串:\n", MAX_LEN);
fgets(str, MAX_LEN + 1, stdin); // 从标准输入流(即键盘)读入字符串
str[strcspn(str, "\n")] = '\0'; // 去掉字符串末尾的换行符
int len = strlen(str);
for (int i = 0; i < len / 2; i++) {
char temp = str[i];
str[i] = str[len - i - 1];
str[len - i - 1] = temp;
}
printf("逆置后的字符串是:%s\n", str);
return 0;
}
```
解释:
1. 首先定义一个长度为 `MAX_LEN + 1` 的字符数组 `str` 来存放输入的字符串(其中 `MAX_LEN` 的值为 80,这是题目要求的字符串长度上限)。
2. 使用 `fgets()` 函数从标准输入流(即键盘)读入字符串,读入的最大长度为 `MAX_LEN + 1`,这样可以保证输入的字符串不会超过 `MAX_LEN` 的限制。`fgets()` 函数会自动在读入的字符串末尾加上一个换行符 `\n`,所以需要用 `strcspn()` 函数将它替换为字符串结束符 `\0`,这样后面处理字符串时才不会出现问题。
3. 使用 `strlen()` 函数计算出字符串的长度 `len`(不包括末尾的结束符 `\0`)。
4. 使用一个循环将字符串中的字符逆序交换。具体地,对于字符串中的前一半字符(即 `str[0]` 到 `str[len/2-1]`),将其与对应的后一半字符(即 `str[len-1]` 到 `str[len/2]`)交换位置。注意到当字符串长度为奇数时,中间的那个字符不需要交换,所以循环条件是 `i < len / 2` 而不是 `i <= len / 2`。
5. 最后输出逆置后的字符串即可。
注意:上述程序中没有进行输入的字符串长度检查,如果输入的字符串长度超过了 `MAX_LEN`,则可能会导致数组越界等错误。如果需要完全确保输入的字符串长度不超过 `MAX_LEN`,可以使用 `scanf()` 函数来读入字符串,并配合使用格式化字符串 `%80s`(其中 `80` 是输入的字符串长度上限),这样就可以直接限制输入字符串的长度,不需要再进行额外的检查。例如:
```c
scanf("%80s", str);
```
阅读全文