编写函数实现累加功能,要求在数组A[100]中按输入范围表达式求和,支持如下两种字符
":"为范围表示符,"n:m"表示从n到m,":m"表示从0到m,"m:"表示从m到末尾
","为分隔符
A[100] = [0,1,2,3,4,.....99];
比如输入"3:7,9,45,2,77:78"
输出:236 (即3+4+5++6+7+45+2+77+78)
输入:":3,50,97:"
输出:350 (即1+2+3+50+97+98+99)
请实现函数int Sum(char* range)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 128
int A[100] = {0};
//判断所分割的字符串中是否含有':'
int judge(char *result)
{
char *p = result;
while(*p != '\0')
{
if(*p == ':')
{
return 1;
}
else
{
p++;
}
}
return 0;
}
int Sum(char* range)
{
int sum1 = 0;
int i = 0;
char* delim = ",";
char temp[10] ={0};
char *result = strtok(range,delim); //用strtok函数对输入的字符串按照","分割
while(result != NULL)
{
//判断分割的子字符串是否有':'
if(judge(result))
{
strcpy(temp,result);
char *p = temp;
if(*p == ':')
{
// one = strtok(result,":");
p++;
for(i=0;i<=atoi(p);i++)
{
sum1 += i;
}
}
else
{
while(*p != ':')
{
p++;
}
*p = '\0';
char *q = p+1;
if(*q == '\0')
{
for(i=atoi(temp);i<=99;i++)
{
sum1 += i;
}
}
else
{
for(i=atoi(temp);i<=atoi(q);i++)
{
sum1 += i;
}
}
}
}
else //分割的子字符串中没有':'
{
sum1 += atoi(result);
}
result = strtok(NULL,delim);
}
return sum1;
}
int main(int argc, const char *argv[])
{
int i = 0;
int sum = 0;
char range[N] = {0};
for(i =0 ; i < 100 ; i++)
{
A[i] = i;
}
printf("please input range\n");
scanf("%s",range);
//如果输入字符串为':',直接求0~99的累加和,并返回结束
if(range[0] == ':' && strlen(range)==1)
{
for(i=0; i<100 ; i++)
{
sum = sum + i;
}
printf("sum = %d\n",sum);
return;
}
//如果输入字符串不是仅有‘:’,还有其它的字符调用Sum()
sum = Sum(range);
printf("sum = %d\n",sum);
return 0;
}