描述 将输入字符串过滤转为数字输出 输入描述 1、输入一行以英文逗号分隔字符串,格式为"1-2-,1-1,2-0-," 2、英文逗号分割后的字符串规则为,只包含数字0-7和'-',不能只包含'-',最长8位; 输出描述 针对每个分隔后的字符串,对应一个8进制数字 1、1-1对应8进制11,1-2-对应8进制的120,1--转换为8进制的100,--1-对应8进制10 2、第一个数字前的一个或多个'-'为无效值,第一个数字后的连续'-',在连续 '-'中间插入0,如果结尾是 '-', 在末尾补一个0,转换之后去掉'-'即为对应的8进制数 3、过滤掉无效输入,输出有效字符串和对应的10进制数,"原始值:转换后的值",例如"1--,--,--1-" 输出为 "1--:64,--1-:8
时间: 2024-04-16 12:28:25 浏览: 17
你可以使用以下的 C 代码来实现字符串过滤并转换为数字输出:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* filterString(char* str) {
int len = strlen(str);
char* filteredStr = malloc(len);
int validIndex = 0;
int isFirstDigit = 1;
for (int i = 0; i < len; i++) {
if (str[i] >= '0' && str[i] <= '7') {
filteredStr[validIndex] = str[i];
validIndex++;
isFirstDigit = 0;
} else if (str[i] == '-') {
if (!isFirstDigit) {
filteredStr[validIndex] = '0';
validIndex++;
}
}
}
filteredStr[validIndex] = '\0';
return filteredStr;
}
int octalToDecimal(int octal) {
int decimal = 0, i = 0;
while (octal != 0) {
decimal += (octal % 10) * pow(8, i);
++i;
octal /= 10;
}
return decimal;
}
int main() {
char input[201];
printf("请输入以英文逗号分隔的字符串:");
scanf("%200s", input);
char* token = strtok(input, ",");
while (token != NULL) {
char* filteredStr = filterString(token);
if (strlen(filteredStr) > 0) {
int octal = atoi(filteredStr);
int decimal = octalToDecimal(octal);
printf("%s:%d,", token, decimal);
}
free(filteredStr);
token = strtok(NULL, ",");
}
return 0;
}
```
你可以输入一行以英文逗号分隔的字符串,程序将按照规则进行过滤和转换,并输出每个有效字符串及其对应的十进制数字。输出格式为"原始值:转换后的值"。