编写字符串过滤函数int filterch(char*str),其功能是:只保留str中非零数字字符,并计算其中奇数数字之和。例如: str为 ad12AB3#4(0)s%*05678,过滤后str为12345678,其中奇数数字之和为16。要求:在主函数中初始化一个包含任意大小写英文字母、本人学号及其他字符的字符串(字符串长度不超过20),调用过滤函数filterch,分行输出原始字符串、过滤后的字符串及计算结果。(不允许使用字符串处理库函数)
时间: 2023-02-09 19:06:28 浏览: 42
编写字符串过滤函数 `int filterch(char*str)` 的伪代码如下:
```
int filterch(char*str) {
// 定义变量sum来记录奇数数字之和
int sum = 0;
// 定义变量i来记录当前遍历到的位置
int i = 0;
// 定义变量j来记录当前保留的字符的位置
int j = 0;
// 遍历字符串
while (str[i] != '\0') {
// 如果当前字符是数字
if (str[i] >= '0' && str[i] <= '9') {
// 将当前字符保留下来
str[j] = str[i];
// 如果当前字符是奇数,将其加入sum中
if ((str[i] - '0') % 2 == 1) {
sum += str[i] - '0';
}
// j加1
j++;
}
// i加1
i++;
}
// 将字符串末尾设为'\0'
str[j] = '\0';
// 返回sum
return sum;
}
```
这个函数的功能是遍历字符串,如果当前字符是数字就保留下来,同时如果当前字符是奇数就将其加入sum中,最后将字符串末尾设为'\0'并返回sum。
相关问题
编写函数void myitoa(int n,char *str),其功能是将一个整数转换为对应的字符串。
好的,以下是函数的实现:
```c
#include <stdio.h>
#include <string.h>
void reverse(char *str, int len) {
int i = 0, j = len - 1;
while (i < j) {
char temp = str[i];
str[i] = str[j];
str[j] = temp;
i++;
j--;
}
}
void myitoa(int n, char *str) {
int i = 0;
if (n == 0) {
str[i++] = '0';
str[i] = '\0';
return;
}
int sign = (n < 0) ? -1 : 1;
n = (sign == -1) ? -n : n;
while (n) {
str[i++] = n % 10 + '0';
n = n / 10;
}
if (sign == -1) {
str[i++] = '-';
}
str[i] = '\0';
reverse(str, i);
}
int main() {
int n = 12345;
char str[100];
myitoa(n, str);
printf("The integer %d is represented as string %s\n", n, str);
return 0;
}
```
函数 `myitoa` 的参数为整数 `n` 和字符串指针 `str`,返回值为 `void`。函数中使用了一个辅助函数 `reverse`,它用于将字符串反转。
首先判断 `n` 是否为 0,如果是,直接将字符串赋值为 "0";否则,判断 `n` 是否为负数,如果是,将 `sign` 设为 -1,并将 `n` 取反。接下来,从低位到高位依次将 `n` 的每一位数字转换为字符,并存储到字符串中。如果 `n` 是负数,再在字符串的开头加上一个负号。最后,将字符串反转,使得字符串中的数字按照从高位到低位的顺序排列。
在本示例中,程序将整数 12345 转换为字符串 "12345"。
用C语言实现字符串转数字函数:int atoi(const char *str)
以下是使用C语言实现的atoi函数:
```c
#include <stdio.h>
int atoi(const char *str) {
int result = 0;
int sign = 1;
int i = 0;
// 处理空格
while (str[i] == ' ') {
i++;
}
// 处理符号
if (str[i] == '-' || str[i] == '+') {
sign = (str[i++] == '-') ? -1 : 1;
}
// 转换数字
while (str[i] >= '0' && str[i] <= '9') {
result = result * 10 + (str[i++] - '0');
}
return sign * result;
}
int main() {
const char *str = "12345";
int num = atoi(str);
printf("转换后的数字为: %d\n", num);
return 0;
}
```
在上述代码中,我们使用了循环来遍历字符串中的字符,并根据ASCII码进行相应的转换操作。处理空格、符号和数字的逻辑都有相应的处理方式,最后返回转换后的整数值。