C语言 输入一串含有正整数的字符串,对字符串中的整数进行求和,并且显示求和结果。

被引用的函数代码如下:
int f4(int sum)
{
char c[80];
int a[80]={0},i,j;
printf("输入一串字符(少于80个):");
gets(c);
i=0;j=0;sum=0;
while(c[i]!='\0')
{
if(c[i]>='0'&&c[i]<='9')
a[0]=a[0]*10+(c[i]-'0');
else if(c[i-1]>='0'&&c[i-1]<='9')
{sum=sum+a[j];j++;}

i++;

}
printf("sum=%d",sum);
return 0;
}
要求如下:

img

运行结果如图:

img


应该的结果是sum=23;但是。
求解答!

#include <stdio.h>
#include<string.h>
 
int main(void)
{
    char c1[80];
    int i=0,j=0,sum=0;
    int a[80]={0};
    gets(c1);
    i=j=0;
    while(c1[i]!='\0'){
        if(c1[i]>='0' && c1[i]<='9')
            {a[j] = a[j] * 10 + (c1[i] - '0');}
            
        else
            {sum += a[j];
            if (c1[i - 1] >= '0' && c1[i-1] <= '9')
                j++;}
        //printf("%c",a[i]);
        i++;
    }
    printf("%d",sum);
}

代码修改如下:


int f4(int sum)
{
    char c[80];
    int a[80] = { 0 }, i, j;
    printf("输入一串字符(少于80个):");
    gets(c);
    i = 0; j = 0; sum = 0;
    while (c[i] != '\0')
    {
        if (c[i] >= '0' && c[i] <= '9')
            a[j] = a[j] * 10 + (c[i] - '0');

        else
        {
            sum = sum + a[j]; j++;
        }
        i++;
    }
    if (a[j] != 0)
        sum = sum + a[j];

    printf("sum=%d", sum);
    return 0;
}


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

double number[10] = { 0 };
int count = 0;
void fun(char A[]);
void one();
void two();
void tree();

int main() {
    int operation;
    printf("第一种字符串(1)\n");
    printf("第二种字符串(2)\n");
    printf("第二种字符串(3)\n");
    printf("对应字符串类型的序号: ");
    scanf("%d", &operation);
    switch (operation)
    {
    case 1:
        one();
        break;
    case 2:
        two();
        break;
    case 3:
        tree();
        break;
    default:
        printf("输入错误,请重新输入!\n");
        break;
    }
}
/*
double number[10] = { 0 };
int count = 0;
*/
void fun(char A[]) {
    char num[80];
    char* s;
    int l = strlen(A), j = 0, i = 0;
    for (i = 0; i < l; i++)
    {
        if (A[i] >= '0' && A[i] <= '9' && A[i + 1] >= '0' && A[i + 1] <= '9')
        {
            num[j] = A[i];
            j++;
        }
        else if (A[i] >= '0' && A[i] <= '9' && (A[i + 1] < 48 || A[i + 1] > 57))
        {
            num[j] = A[i];
            j++;
            break;
        }
    }
    if (j != 0) {
        num[j] = '\0';
        number[count] = strtod(num, NULL);
        count++;
    }
    if (i < l) {
        s = A;
        for (j = 0; j < i + 1; s++, j++);
        fun(s);
    }
}

void one() {


}

void two() {
    char str[200];
    int i, sum = 0;
    printf("请输入字符串:");
    getchar();
    gets(str);
    count = 0;
    fun(str);
    for (i = 0; i < count; i++)
        sum += number[i];
    printf("字符串中所有正整数之和为:%d\n\n", sum);
}

void tree() {
    char str[80];
    double sum = 0, quadrature = 1;
    printf("请输入字符串:");
    getchar();
    gets(str);
    count = 0;
    fun(str);
    for (int i = 0; i < count; i++)
    {
        sum += number[i];
        quadrature *= number[i];
    }
    printf("字符串中所有正整数之和为:%.0lf,所有正整数之积为:%.0lf\n\n", sum, quadrature);
}

img

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632