c++ - 将负数存储在 char 数组中(仍然没有所需/所需的解决方案)

标签 c++ c algorithm compression user-input

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/

相关文章:

c++ - 检查类是否是模板专用化(使用 bool 或 int 等模板参数)

c++ - 为 opencv resize 函数设置 src 和 dst img 相同

c - 如何使用两个scanf避免用户输入越界?

c++ - 从命令行调用 Eclipse 的格式选项

python - 如何修复 ZigZag 问题中的 'list index out of range' 错误?

c++ - 您可以在类或结构中使用线程局部变量吗

c++ - 类模板的友元函数的显式特化

c++ - strtok 工作不正常

python - 制定一个算法,将电力单位分配给一周中的几天,并找出哪个是最少的

algorithm - 是否有一种快速算法来确定充满变量的矩阵的行列式?