EDIT:
platform unix
type : ansi c
我有表格中的数据;
1 2 3 -1 2 -9 1 3 +
-1 2 -3 -4 -
*
-9 到 9 之间的整数
'+ - *' 运算符并显示您应该获取位于下一行的数据
数据是char双指针
每一行必须存储在双指针字符数组中
example : data[0] :=> 1 2 3 -1 2 -9 1 3 +
more precisely : data[0][3] must store -1
当我获取数据并存储时,我无法在 data[i][j] 中实现存储 -3(负整数) 因为'-'是一个字符所以3不被data[i][j]接受
我应该怎么做才能处理这个问题?
编辑:我的代码;
size_t datalen = sizeof( char ) ;
data = ( char ** ) malloc( sizeof (char * ) )
for ( i = 0 ; ; ++i )
data[i] = (char * ) malloc ( datalen )
for ( j = 0 ; ; ++ j )
signed char ch;
if j != 0
datalen += 1
data[i] = ( char * ) realloc ( begin[i], datalen )
scanf ("%c ", &ch )
begin[i][j] = ch
if ch == OP ( op = + , - , * , / )
break
if strlen ( begin[i] ) == 1
break
编辑: 如果你看一下 ascii 表,你就会明白为什么我不使用 scanf("%d",&ch) http://www.asciitable.com/
最佳答案
我认为这里的关键是利用有限的输入值范围。由于您的输入数字只会是一位整数,因此找到几个不可能的输入值并将它们保留给运算符(operator)。例如,您可以让 64 为“+”,65 可以为“-”等。使用 strtol()
一次读取一个数字,然后验证它们并确保它们落在您指定的范围内并将它们转换为一个字符。如果您看到没有附加数字的运算符,请将其转换为适当的保留值(为更清晰的代码创建“encode_operator”和“decode_operator”函数)并存储它。
这种方法的缺点是您不能盲目地将存储的值用作数字。从数组中提取数据时,必须检查每个值以查看它是运算符还是数字。在你的例子中,一个简单的 #IS_OPERATOR(x) ((x < -9) || (x > 9))
宏应该能够为您执行此操作。
关于c++ - 将负数存储在 char 数组中(仍然没有所需/所需的解决方案),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4487370/