C语言编程题目求解

【题目】
一个有符号整型数以字符串形式存放在字符数组a中,字符串中只会出现数字字符、“-”、“+”和空格。约定“-”和“+”只能出现在a[0]的位置。若a[0]位置的字符是“-”,则表示该整型数为负数,否则为正数。除a[0]外,其他位置还可能出现空格。试按下列要求编写程序:
1.编写函数int chang(char a[], int b[],int *n)按下列规则转换字符数组a中的字符串:
(1) 整型变量sign存放数符,当整型数为正数时sign为0,为负数时 sign为1,函数返回sign值;
(2) 整型数组b依次存放字符串a中出现的所有数字字符转换为对应的整型数后的值(不包括数符);
(3) n指向的变量保存放入b数组的整型数的个数;
(4) 字符串a中的空格忽略不计
如:字符串“ 20 3 ”转换后的结果是:sign=0,b=(2,0,3)
字符串“-3 3740”转换后的结果是:sign=1,b=(3,3,7,4,0)
2.函数中输入二个字符串:“-2 35 1”,“+38 2 46”,分别调用函数chang做字符串转换,并将转换结果以例子给出的形式写到文件myt2.out中。

第1个回答  推荐于2016-06-06
#include <stdio.h>
#include <string.h>

int chang(char a[], int b[],int *n)
{
int sign;
int num = 0;
int i;

if (a[0] == '-')
sign = 1;
else
sign = 0;

for (i = 1; i < *n; ++i)
{
if (a[i] != ' ')
{
b[num++] = a[i] - '0';
}
}
*n = num;

return sign;
}

int main(void)
{
char a[] = "-2 35 1";
char b[] = "+38 2 46";
char resc[512];
int res[512];
int n, sign;
FILE *f = fopen("myt2.out", "a+");
int i;

n = strlen(a);
sign = chang(a, res, &n);
fprintf(f, "sign=%d, b=(%d", sign, res[0]);
for(i = 1; i < n; ++i)
{
fprintf(f, ",%d", res[i]);
}
fprintf(f, ")\n");

n = strlen(b);
sign = chang(b, res, &n);
fprintf(f, "sign=%d, b=(%d", sign, res[0]);
for(i = 1; i < n; ++i)
{
fprintf(f, ",%d", res[i]);
}
fprintf(f, ")\n");
fclose(f);
return 0;
}本回答被提问者采纳