#include<stdio.h> int len(char a[]) { int b=0; for(int i=0;a[i]!=0;i++) //a[i]!=0 表示数组中的i不为0 b++; return b; } int main() { printf("请输入字符串:"); char str[100]; gets(str); printf("长度为:%d",len(str)); return 0; }
时间: 2024-01-22 20:03:15 浏览: 96
这段代码看起来已经很简洁了,但是在实际使用中可能会存在一些问题,下面是一些可能的优化建议:
1. 在 `len()` 函数中,变量 `b` 可以直接声明为 `size_t` 类型,因为它表示的是数组长度,这个值不可能为负数。
2. 在 `len()` 函数中,可以使用指针来遍历数组,这样可以避免使用下标访问数组元素时的越界问题。
3. 在 `main()` 函数中,可以使用 `fgets()` 函数来读取用户输入的字符串,这样可以避免使用 `gets()` 函数时可能出现的缓冲区溢出问题。
4. 在 `main()` 函数中,可以使用 `%zu` 格式化符号来输出 `size_t` 类型的值。
下面是优化后的代码示例:
```c
#include <stdio.h>
size_t len(char *a) {
size_t b = 0;
while (*a++) {
b++;
}
return b;
}
int main() {
printf("请输入字符串:");
char str[100];
fgets(str, sizeof(str), stdin);
size_t length = len(str);
printf("长度为:%zu\n", length);
return 0;
}
```
相关问题
#include <stdio.h>中小写转大写
`#include <stdio.h>` 是 C 语言中预处理指令的一部分,它引入了标准输入输出库(stdio),而小写转大写通常是在字符串操作中需要的。在 C 语言中,如果你想要将字符串中的所有字符从小写转换为大写,可以先定义一个函数,比如使用标准库提供的 `toupper()` 函数,它是 `ctype.h` 库的一部分,用于转换字符。
下面是一个简单的示例,展示如何在 C 中实现这个功能:
```c
#include <stdio.h>
#include <ctype.h>
#include <string.h>
// 自定义函数,接收字符串并返回转换后的字符串
char* to_uppercase(char *str) {
int len = strlen(str);
for (int i = 0; i < len; ++i) {
str[i] = toupper((unsigned char)str[i]);
}
return str;
}
int main() {
char lowercase_str[] = "hello, world!";
char uppercase_str[50];
strcpy(uppercase_str, to_uppercase(lowercase_str));
printf("Original: %s\n", lowercase_str);
printf("Uppercased: %s\n", uppercase_str);
return 0;
}
```
在这个例子中,`to_uppercase` 函数遍历字符串中的每个字符,并调用 `toupper` 将其转换成大写。然后在主函数中,我们将小写字符串传递给这个函数,得到的结果存储在另一个数组中。
#include <stdio.h> #include <string.h> int main() { char str[100]; fgets(str,100,stdin); //****补全代码**** return 0; }回文数
这段代码是用来判断用户通过标准输入(stdin)输入的一串字符组成的字符串是否是回文的。回文数是指正读反读都一样的数字或者字符串,比如"level"、"12321"等。
下面是代码的完整版本:
```c
#include <stdio.h>
#include <string.h>
int main() {
char str[100];
fgets(str, 100, stdin);
// 将输入的字符串转换为小写并移除空格,因为比较时需要忽略大小写和空格
for (size_t i = 0; i < strlen(str); i++) {
str[i] = tolower(str[i]);
if (str[i] == ' ') {
str[i] = '\0'; // 连续空格替换为单个'\0'
}
}
// 检查字符串是否回文
size_t len = strlen(str);
bool is_palindrome = true;
for (size_t i = 0; i < len / 2; i++) {
if (str[i] != str[len - i - 1]) {
is_palindrome = false;
break;
}
}
if (is_palindrome) {
printf("这是一个回文数。\n");
} else {
printf("这不是一个回文数。\n");
}
return 0;
}
阅读全文