c - 在c中实现字符串到int函数
问题描述
我正在尝试实现标题中所述的功能。我认为我非常接近解决方案,但存在问题。
输入:51% 被录取。输出:x:51(空)
但输出应该是:
s:% 被录取。
我的尝试在这里:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int str2int(int);
int isdigit(int);
long str2double(int);
int driver(char *, char *);
int main(){
char *s = "51% are admitted.";
char *sPtr;
int x = driver(s, sPtr);
printf("x:%d sPtr:%s", x, sPtr);
return 0;
}
int isdigit(int ch){
return (ch>=48 && ch<=57)?1:0;
}
int str2int(int ch){
return ch-48;
}
int driver(char *s, char *sPtr){
int i=0, number=0;
while(s[i]!='\0' && isdigit(s[i])){
number = number*10 + str2int(s[i]);
i++;
}
sPtr=s+i;
printf("%s\n", sPtr);
return number;
}
问题是,在主函数中,sPtr 似乎为空,但在驱动程序函数中,sPtr 是 % 被承认,这是它应该是的。如何解决问题,以便在不使用驱动程序函数中的 printf 语句的情况下正确打印解决方案?
编辑:
问题正如@Johnny Mopp 所说,我试图传递该变量的副本。因此,我需要传递在原型中出现 char **sPtr 的 *sPtr 变量的地址。代码应该是:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int str2int(int);
int isdigit(int);
long str2double(int);
int driver(char *, char **);
int main(){
char *s = "51% are admitted.";
char **sPtr;
int x = driver(s, &sPtr);
printf("x:%d sPtr:%s", x, sPtr);
return 0;
}
int isdigit(int ch){
return (ch>=48 && ch<=57)?1:0;
}
int str2int(int ch){
return ch-48;
}
int driver(char *s, char **sPtr){
int i=0, number=0;
while(s[i]!='\0' && isdigit(s[i])){
number = number*10 + str2int(s[i]);
i++;
}
*sPtr=s+i;
return number;
}
感谢@Johnny Mopp 和@paulsm4 的贡献
解决方案
推荐阅读
- spring - 如何有效地将大量数据从数据库传输到客户端用户 Spring REST
- visual-studio-code - 在当前窗口中使用 `code.` 打开 VSCode,而不是打开一个新窗口?
- reactjs - React 中的 AWS Amplify UI 自定义
- typescript - 点燃元素打字稿反映:真
- javascript - 在 React Native 中使用自定义文本时出现内存泄漏
- couchdb - 使用多索引排序查询 Hyperledger Fabric 中的状态级别数据库
- r - 根据逻辑条件从数据框中提取单个值,Tidyverse 风格
- node.js - 使用 NodeJS 在测试中从磁盘读取 - 同步与异步
- r - glmer使用哪个家庭?
- python - 在 TensorFlow 中手动设置梯度值并在反向传播中使用它们