给定一个整数Q(2<=Q<=10),一个非空字符串,以及另一个整数T(2<=T<=10), 编程要求过滤掉字符串中所有非Q进制数对应的字符组成一个新的字符串,该字符串无正负号,将该字符串表示的Q进制数转换为T进制数的字符串输出。 用C语言解答
时间: 2024-10-28 22:10:44 浏览: 34
Day05_剑指Offer.md
在C语言中,你可以通过以下几个步骤来解决这个问题:
1. 定义函数`filterAndConvert`接收输入的三个参数:整数Q、非空字符串str和整数T。
```c
#include <stdio.h>
#include <string.h>
// 函数用于过滤并转换字符串
char* filterAndConvert(int Q, const char *str, int T) {
// 初始化变量
size_t str_len = strlen(str);
char filteredStr[str_len];
int qBaseIndex = 0;
for (size_t i = 0; i < str_len; ++i) {
if (isdigit(str[i]) && str[i] >= '0' && str[i] <= '9') { // 检查字符是否是非Q进制数字
filteredStr[qBaseIndex++] = str[i] - '0'; // 过滤并存储
}
}
filteredStr[qBaseIndex] = '\0'; // 添加字符串结束符
// 将过滤后的字符串转换为Q进制整数
long long int numInQ = strtoll(filteredStr, NULL, Q);
// 将Q进制整数转换为T进制字符串
char*tbaseResult = malloc(sizeof(char)*(T + 1));
sprintf(tbaseResult, "%lld", numInQ); // 使用sprintf而不是printf防止溢出
tbaseResult[strlen(tbaseResult)-1] = '\0'; // 去除末尾多余的'0'
return tbaseResult;
}
```
2. 主函数中获取用户输入并调用上述函数:
```c
int main() {
int Q, T;
scanf("%d %d", &Q, &T);
char str[100];
fgets(str, sizeof(str), stdin); // 注意fgets处理换行符
str[strcspn(str, "\n")] = '\0'; // 移除末尾的换行符
char* result = filterAndConvert(Q, str, T);
printf("转换后的T进制数为: %s\n", result);
free(result); // 释放内存
return 0;
}
阅读全文