题目描述:输入格式为 “整数字符串整数.整数”,其中字符串固定长度为5,输出为三个整数之和
该代码较为初级且繁琐,只用了数组有关知识
代码如下:
#include<stdio.h>
#include<math.h>
#include<string.h>
int sum(char a[]){//该子函数将提取出的数字部分化为整数
int t,i,m=0,n=0;
t=strlen(a);
for(i=t-1;i>=0;i--){
m=(a[i]-48)*pow(10,n)+m;
n++;
}
return m;
}
int main(){
char a[50]={0},b[50]={0},k[50]={0},d[50]={0};
int i,n=0,s,c=0,t;//s作为子函数的返回值,c作为三个整数部分的和
printf("请输入符合格式的字符串:\n");
gets(a);
//将输入的字符串分为三个部分,即刚开始的整数部分,碰到5个字符时的整数部分,小数点后的整数部分,在每个部分前加以判断语句,判断数字是否为负数
// 刚开始的整数部分
if(a[0]=='-'){
for(i=1;i<strlen(a);i++){
if(a[i]>=48 && a[i]<=57){
b[n]=a[i];
n++;
continue;
}
s=-sum(b);
printf("子函数的返回值为:%d",s);
printf("\n");
c=c+s;
printf("此时c的值为:%d",c);
printf("\n");
break;
}}else{
for(i=0;i<strlen(a);i++){
if(a[i]>=48 && a[i]<=57){
b[n]=a[i];
n++;
continue;
}
s=sum(b);//将其存入数组b中并提取
printf("子函数的返回值为:%d",s);
printf("\n");
c=c+s;
printf("此时c的值为:%d",c);
printf("\n");
break;
}
}
//碰到5个字符时的整数部分
n=0;
if(a[i+5]=='-'){
for(i=i+6;i<strlen(a);i++){//此处由于字符的长度固定为5,故可直接跳到第二个整数部分的首位置
if(a[i]!=46){
k[n]=a[i];
n++;
continue;
}
s=-sum(k);//将其存入数组k中并提取,然后与c相加
printf("子函数的返回值为:%d",s);
printf("\n");
c=c+s;
printf("此时c的值为:%d",c);
printf("\n");
break;
}
}
else{
for(i=i+5;i<strlen(a);i++){
if(a[i]!=46){
k[n]=a[i];
n++;
continue;
}
s=-sum(k);
printf("子函数的返回值为:%d",s);
printf("\n");
c=c+s;
printf("此时c的值为:%d",c);
printf("\n");
break;
}
}
//小数点后的整数部分
n=0;
t=i;
if(a[t+1]=='-'){
for(t=i+2;t<strlen(a);t++){
if(a[t]!='\n'){
d[n]=a[t];
n++;
continue;
}
break;
}
s=-sum(d);
printf("子函数的返回值为:%d",s);
printf("\n");
c=c+s;
printf("此时c的值为:%d",c);
}
else{
for(t=i+1;t<strlen(a);t++){
if(a[t]!='\n'){
d[n]=a[t];
n++;
continue;
}
break;
}
s=sum(d);
printf("子函数的返回值为:%d",s);
printf("\n");
c=c+s;
printf("此时c的值为:%d",c);
}
return 0;
}
代码的输出结果包括了每次调用子函数的值以及每部分相加的值,例子结果如下:
欢迎指正
很好,当我看到这个问题只需要三行代码的时候我就知道自己是个菜鸟了,不过又学到一点东西也不是坏处。简单代码如下:
#include <iostream>
#include <string>
using namespace std;
int main() {
int a,b,c;
scanf("%d%*5s%d.%d",&a,&b,&c);
printf("%d",a+b+c);
return 0;
}
这里的%*5s的*代表跳过相应数据,*5s即跳过5个字符,可以看成忽略吧。