C语言 字符串转换
答案:2 悬赏:80 手机版
解决时间 2021-02-04 05:06
- 提问者网友:容嬷嬷拿针来
- 2021-02-03 21:31
Description
输入一个以回车结束的字符串,它由数字和字母组成,请过滤掉所有非数字字符,然后将数字字符串转换成十进制整数后乘以2输出。
Input
输入一个以回车结束的字符串,长度不超过100,由数字和字母组成。
Output
将转换后的整数乘以2输出,测试数据保证结果在int范围内。
Sample Input
sg987aa65t498
Sample Output
197530996
如果能改一下最好 我知道错的不少 实在不行麻烦再写一个。
#include
#include
#include
int main()
{
int i,n,j=0,sum=0;
char b[100],a[100];
scanf("%d",&n);
gets(b);
for(i=0 ; b[i]!='\0' ; i++)
{
if(isdigit(b[i])==1)
{
a[j]=b[i];//如果是数字把b[i]的数赋给a[j]
j++;
}
}
for(i=j ; i>=1 ; i--)
{
a[i]*pow(10,i+1);//从最高位乘10的i+1次方
sum+=a[i];
}
printf("%d",sum*2);
}
最佳答案
- 五星知识达人网友:旧脸谱
- 2021-02-03 22:44
int i,j=0,sum=0;
char b[100],a[100];
scanf("%s", b);
for(i=0 ; b[i]!='\0' ; i++)
{
if(isdigit(b[i])==1)
{
a[j]=b[i];//如果是数字把b[i]的数赋给a[j]
j++;
}
}
for(i = 0 ; i < j ; i++)
{
sum = sum + (a[i] - 48)*pow(10,j - i - 1); // a[i]内是字符转换成十进制数ASCII-48
}
printf("%d",sum*2);
全部回答
- 1楼网友:独钓一江月
- 2021-02-03 23:11
#include <stdio.h>
int strlen(char *s) {
int len = 0;
char *p = s;
while(*p++) ++len;
return len;
}
double atod(char *s) { // 将字符串转换为浮点数
double fnum = 0.0;
char *p = s;
int i,slen,inum = 0,pointpos = -1;
slen = strlen(s);
while(*p) {
if(*p == '.') { // 确定第一个小数点位置
pointpos = p - s;
break;
}
++p;
}
if(pointpos == -1) {
for(i = 0; s[i]; ++i) // 没有小数,仅需转换整数部分
inum = 10*inum + s[i] - '0';
return (double)inum;
}
for(i = 0; i < pointpos; ++i) // 有小数,先转换整数部分
inum = 10*inum + s[i] - '0';
for(i = slen - 1; i > pointpos; --i) { // 再转换小数部分
if((s[i] >= '0') && (s[i] <= '9')) // 串中可能还有'.',必须过滤掉
fnum = (fnum + s[i] - '0')/10.0;
}
return(inum + fnum);
}
double convert(char *s) { // 提取数字串
int i = 0;
char *p = s,q[51];
while(*p) {
if((*p >= '0') && (*p <= '9') || (*p == '.')) q[i++] = *p;
++p;
}
q[i] = '\0';
printf("数字串 : %s\n",q);
return atod(q);
}
int main() {
char s[51];
printf("请输入字符串 : ");
gets(s);
printf("%s中的数字串是:%.4lf\n",s,convert(s));
return 0;
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯