等价类划分

来源:百度知道 编辑:UC知道 时间:2024/06/01 12:17:40
哪位高手帮我编一个C语言程序,急!在线等!万分感谢!
1.设计函数strtoint
2.编写用例测试strtoint
3.要包括所有情况
4.用C语言编写
把一段字符串变成整数
可以划分为如下等价类:
有效输入的等价类有
(1)1-6个数字字符组成的数字串
(2)最高位数字是0的数字串
(3)最高位数字左邻是负号的数字串
无效输入的等价类有
(4)空字符串(全是空格)
(5)左部填充的字符既不是0也不是空格
(6)最高位数字右面由数字和空格混合组成
(7)最高位数字右面由数字和其他字符混合组成
(8)负号与最高位数字之间有空格
合法输出的等价类有
(9)在计算机能表示的最小负整数和0之间的负整数
(10)0
(11)在0和计算机能表示的最大正整数之间的正整数
非法输出的等价类有
(12)比计算机能表示的最小负整数还小的负整数
(13)比计算机能表示的最大正整数还大的正整数
(-32786__32786)

根据上面划分的等价类,可以设计出下述测试方案(每个方案由3部分内容组成)
(1)1-6个数字组成的数字串,输出是合法的正整数
输入:' 1'
预期的输出:1
(2)最高位数字是0的字符串,输出是合法正整数
输入:'000001'
预期的输出:1
(3)负号与最高位数字紧相邻,输出合法的负整数
输入:'-00001'
预期的输出:-1
(4)最高位数字是0,输出也是0
输入:'000000'
预期的输出:0
(5)太小的负整数
输入:'-47561'
预期的输出:“错误——无效输入”
(6)太大的正整数
输入:'132767'
预期的输出:“错误——无效输入”
(7)空字符串
输入:'

由于ID被封,所以问题补充只能这样发:
(7)中的空字符串就是6个空格,只是提交后空格就没有了
(11)中负号的前后都有空格
其实这个很简单的,只要实现下面各个功能就行了,不过小弟学艺精还请各位大侠帮忙.不盛感激.

其实这个很简单的,只要实现下面各个功能就行了,不过小弟学艺精还请各位大侠帮忙.不盛感激.

呵呵

太难了.唉.

这回答了 都不是一般的高手了!~~ 能提出这个问题也算高手了。。。

因为(7)空字符串,无法通过scanf读入,所有没有办法验证该分支,不过如果传入给strtoint一个" "的话,它的判断也是没有错的。

代码如下:
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>

void strtoint(char *str)
{
int num = 0;
int len = strlen(str);

if (len > 6)
{
printf("Error: illegal input.\n");
return;
}

bool isNegative = 0;

//判断是否是负数
if (str[0] == '-')
{
isNegative = 1;
}

int i;
for (i = isNegative; i< len; i++)
{
if (isdigit(str[i]))
{
num = num * 10 + str[i] - '0';
}
else
{
if (s