从'char array'打印数字如何使它们成为数字而不是数字

时间:2017-12-30 20:44:12

标签: c++

我有一个表达式,它存储在一个char数组char equation[101];中输入是通过cin.getline(); 我想使用函数void printAllNumbers(const char* equation)打印表达式中的所有数字 例如:输入:24cd [* 43-28 / 5 * 93} 9(ks)

输出:

24
43
28
5
93
9

我该如何做到这一点:我浏览阵列,如果找到一个数字,我就打印出来。但是,它们是数字,而不是数字。 void printAllNumbers(const char * equation){

  for (int i=0; i < strlen(equation); i++){
    if (equation[i]== '1' || equation[i]== '2' || equation[i]== '3' || equation[i]== '4'|| equation[i]== '5'|| equation[i]== '6'|| equation[i]== '7'|| equation[i]== '8'||equation[i]== '9')
    cout << equation[i] << endl;
  }
}

3 个答案:

答案 0 :(得分:0)

尝试这样的事情:

#include <sstream>
#include <iostream>
#include <cctype>

int main(int argc, char *argv[])
{
    int j=0;
    char equation[101]{'2','4','c','d','[','*','4','3','-','2','8','/','5','*','9','3','}','9','(','k','s',')'};
    char number[j];

    for (int i=0; i < sizeof(equation); i++)
    {
        if (isdigit(equation[i]))
        {
            number[j++] = equation[i];
        }
    }

    std::cout << number << std::endl;
}

答案 1 :(得分:0)

这里是一些使用一些老式c风格的简化版本:

#include <cstdio>
#include <cstdlib>
#include <cctype>
#include <iostream>

int main() {
  const int len = 101;
  char s[len] = {'\0'};

  std::cin.getline(s, len);

  int i = 0;

  while (i < len) {
    char t[len] = {'\0'};  // here will the every next number be extracted
    int j = -1;

    while (isdigit(s[i]) && i < len && j < len) {
      t[++j] = s[i++];
  }

  if (0 <= j) {
    printf("%s\n", t);     // just print the number as string. here would the conversion to int, unsisigned int or whatsoever take place
  }

  ++i;
}

}

char t []保存字符串编号。您可以使用标准库函数将其转换为数字。

答案 2 :(得分:0)

当您扫描字符串时,您可以处于以下两种状态之一:扫描数字并扫描不是数字的内容。当您扫描一个数字时,累积数字;当你点击不是数字的东西时,写出累计值。像这样:

const char *str = "24cd[*43-28/5*93}9(ks)";
bool in_number = false;
int value;
while (*str) {
    if (isdigit(*str)) {
        if (!in_number) {
            in_number = true;
            value = *str - '0';
        } else {
            value += *str - '0';
        }
    } else if (in_number) {
            std::cout << value << '\n';
            in_number = false;
    }
    ++str;
}