gpt4 book ai didi

将字符串递归转换为整数 - C 编程

转载 作者:太空宇宙 更新时间:2023-11-04 03:26:22 26 4
gpt4 key购买 nike

我正在尝试转换包含数字的字符串。数字以点分隔。我用 sscanf(input, "%i.%i", &first, %second); 做了一个简单的解决方案返回第一个 * 1000 + 第二个;

这可以正常工作,但它有其局限性,因为它仅适用于 1.000.000 以下的数字。我试过使它递归,但我的程序无法编译。也许你们当中有人可以看出问题所在。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char* concat(const char *s1, const char *s2) {
char *result = malloc(strlen(s1)+strlen(s2)+1);//+1 for the zero-terminator
strcpy(result, s1);
strcat(result, s2);
return result;
}

char *convert_spectators( char *input) //
{
char fir[3], sec[100];
int scan_res = sscanf(input, "%3[0123456789]%*[^0123456789]%s", fir, sec);

if (scan_res == 2) {
return concat(fir, convert_spectators(sec));
} else if (scan_res == 1) {
return fir;
}

}

int main() {
printf("Result: %i\n", atoi(convert_spectators("123.456.789")));
return 1;
}

最佳答案

您从 convert_spectators() 返回“fir”,这是一个本地数组。这是错误的。我修改了您的代码并从调用函数中传递了 fir 和 sec。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char* concat(const char *s1, const char *s2) {
char *result = malloc(strlen(s1)+strlen(s2)+1);//+1 for the zero-terminator
strcpy(result, s1);
strcat(result, s2);
return result;
}

char *convert_spectators( char *input, char *fir, char *sec) //
{
int scan_res = sscanf(input, "%3[0123456789]%*[^0123456789]%s", fir, sec);

if (scan_res == 2) {
char firTemp[4] = "";
char secTemp[100] = "";
return concat(fir, convert_spectators(sec, firTemp, secTemp));
} else if (scan_res == 1) {
return fir;
} else {
printf("Something wrong, scan_res[%d]\n", scan_res);
return NULL;
}

}

int main() {
char fir[4] = "";
char sec[100] = "";

printf("Result: %i\n", atoi(convert_spectators("123.456.789", fir, sec)));
return 1;
}

关于将字符串递归转换为整数 - C 编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40872813/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com