#include <stdio.h> int fhex(char str[]); int main(void) { char str[80]; gets(str); printf("%d",fhex(str)); return 0; } /考生在以下空白处定义函数/ /考生在以上空白处定义函数/ 函数设计 第 2 题,题目描述 程序文件名:CFD13.c 一、要求说明: 1. 请点击出题按钮,下载并打开试题文件 ;按试题要求进行操作,选择合适的编译器进行调试运行。 2. 试题文件中包含如下函数设计部分的标志: /考生在以下空白处定义函数/ /考生在以上空白处定义函数/ 3. 在设计时,不得删除设计部分标志;不得修改设计部分标志以外的程序内容。 4. 完成相关操作后,保存并关闭试题文件;再按本页界面的上传向导选择试题文件,点击【上传到服务器评分】。 二、程序功能: 输入一个字符串,统计字符串中十六进制字符个数并输出。十六进制字符包括0~9,A~F,a~f。 【输入格式】 在一行中输入不超过80个字符长度的、以回车结束的非空字符串。 【输出格式】 在一行中输出字符串中十六进制字符的个数。 【输入样例】 Hello123!@# 【输出样例】 4 【函数定义要求】 请在该程序文件中,实现函数int fhex (char str[]),统计字符串str中十六进制字符的个数,并作为函数的返回结果。
时间: 2024-03-08 18:49:48 浏览: 17
您好,以下是题目中要求实现的函数int fhex(char str[])的代码:
```c
int fhex(char str[]) {
int count = 0;
for(int i = 0; str[i] != '\0'; i++) {
if((str[i] >= '0' && str[i] <= '9') || (str[i] >= 'A' && str[i] <= 'F') || (str[i] >= 'a' && str[i] <= 'f')) {
count++;
}
}
return count;
}
```
该函数首先定义一个计数器count,用于记录字符串中十六进制字符的个数。然后通过for循环遍历字符串中的每一个字符,判断该字符是否为十六进制字符,如果是,则计数器加1。最后返回计数器的值作为函数的结果。
相关问题
#include <stdio.h> void StrReverse ( char str[] ); int main() { char strArr[100]; gets(strArr); StrReverse(strArr); puts(strArr); return 0; }
这是一个反转字符串的程序,使用了 `gets` 函数获取输入字符串,调用了 `StrReverse` 函数对字符串进行反转,最后使用 `puts` 函数输出反转后的字符串。具体实现代码如下:
```
#include <stdio.h>
#include <string.h>
void StrReverse(char str[]) {
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;
}
}
int main() {
char strArr[100];
printf("Enter a string: ");
gets(strArr);
StrReverse(strArr);
printf("Reversed string: %s\n", strArr);
return 0;
}
```
需要注意的是,`gets` 函数已经被标记为不安全,不建议使用。可以使用 `fgets` 函数代替,具体用法可以参考 C 语言标准库。
#include<stdio.h> #include<string.h> #define N 100 int main(void) { char str[N]; printf("请输入句子:"); strcpy(str, gets()); printf("%s\n",str); return 0; }有什么错误
这个程序没有语法错误,但存在以下问题:
1. `gets`函数存在安全隐患,容易导致缓冲区溢出。建议使用`fgets`函数代替。
2. 由于`gets`函数会读取输入的换行符,因此输出的字符串可能会出现多余的空行。可以使用`strtok`函数去掉换行符。
3. 宏定义`N`的值为100,但实际上输入的字符串可能会超过这个长度,导致截断。应该使用动态内存分配函数`malloc`来分配足够的空间。
下面是改进后的代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
char* str = (char*)malloc(sizeof(char) * 1024); // 动态分配1024字节的空间
if (!str) {
printf("内存分配失败\n");
return 1;
}
printf("请输入句子:");
fgets(str, 1024, stdin); // 从标准输入读取一行字符串
strtok(str, "\n"); // 去掉换行符
printf("%s\n", str);
free(str); // 释放动态分配的空间
return 0;
}
```
上述程序使用`malloc`函数动态分配了1024字节的空间,使用`fgets`函数从标准输入读取一行字符串,使用`strtok`函数去掉换行符,最后输出字符串并释放动态分配的空间。