C语言把字符串转化成数字,且把生成的数字转化成有理数
时间: 2023-06-02 10:02:19 浏览: 236
在C语言中,可以使用库函数`atoi`将字符串转化成整数,使用库函数`atof`将字符串转化成浮点数。如果需要将字符串转化成分数,可以自己编写函数进行处理。
以下是一个将字符串转化成分数的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct rational {
int numerator; // 分子
int denominator; // 分母
};
// 求最大公约数
int gcd(int a, int b) {
if (b == 0) {
return a;
} else {
return gcd(b, a % b);
}
}
// 将分数化简为最简形式
void simplify(struct rational* r) {
int g = gcd(r->numerator, r->denominator);
r->numerator /= g;
r->denominator /= g;
}
// 将字符串转化为分数
struct rational string_to_rational(char* str) {
struct rational r;
char* p; // 用于定位分数线位置
p = strstr(str, "/");
if (p == NULL) {
// 如果没有分数线,则将字符串转化为整数
r.numerator = atoi(str);
r.denominator = 1;
} else {
// 如果有分数线,则将分子和分母分别转化为整数
*p = '\0';
r.numerator = atoi(str);
r.denominator = atoi(p + 1);
}
simplify(&r); // 化简分数
return r;
}
int main() {
char str[] = "3/4";
struct rational r = string_to_rational(str);
printf("%d/%d\n", r.numerator, r.denominator);
return 0;
}
```
输出结果为:
```
3/4
```
如果需要将分数转化为小数,可以使用以下代码:
```c
float rational_to_float(struct rational r) {
return (float)r.numerator / r.denominator;
}
```
如果需要将分数转化为字符串,可以使用以下代码:
```c
char* rational_to_string(struct rational r) {
static char str[32];
if (r.denominator == 1) {
sprintf(str, "%d", r.numerator);
} else {
sprintf(str, "%d/%d", r.numerator, r.denominator);
}
return str;
}
```
阅读全文