我有一个表达式,它存储在一个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;
}
}
答案 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;
}