gpt4 book ai didi

C++程序根据特定规则接受一个字符串(num opr num)

转载 作者:行者123 更新时间:2023-11-27 23:18:54 28 4
gpt4 key购买 nike

我有一个程序根据定义的规则接受特定的字符串,即数字运算符编号。例如:2+4-5*9/8

上面的字符串是可以接受的。现在,当我输入类似 2+4-a 的内容时,它再次显示可接受,这是完全 Not Acceptable ,因为根据定义的规则,数字值的范围只能从 0 到 9。我想我将不得不使用 ASCII 值来检查。

引用下面的代码:

#include <iostream>
#include <ncurses.h>
#include <string.h>
#include <curses.h>

int check(int stvalue) {
if(stvalue < 9) return(1);
else return(0);
}

main() {
int flag = 0;
char str[10];
std::cout << "Enter the string:";
std::cin >> str;
int i = 1;
int n = strlen(str);
for(i = 0; i < n - 1; i += 2) {
if(!check(str[i])) {
if(str[i + 1] == '+' || str[i + 1] == '-' || str[i + 1] == '/' || str[i + 1] == '*') flag = 1;
else {
flag = 0;
break;
}
}
}
if(flag == 1) std::cout << "String is acceptable" << std::endl;
else std::cout << "String is not acceptable\n" << std::endl;
getch();
}

输出:

 Enter the string:2+4-5
String is acceptable

Enter the string:3*5--8
String is not acceptable

Enter the string:3+5/a
String is acceptable

最后的输出应该是 Not Acceptable 。

最佳答案

int check(int stvalue) {
if(stvalue < 9) return(1);
else return(0);
}

这是错误的,因为 ASCII 图表上的等价数字是 48 到 57,从 0 到 9。

您可以通过类似于此的函数传递它来简化您的验证:

#include <cctype>
bool validateString(const std::string& str) {
auto compare = [](char c) {
return ((c == '+') || (c == '-') || (c == '*') || (c == '/'));
};
size_t length = str.length();
for(size_t i = 0; i < length; ++i) {
if(!(std::isdigit(str[i]) || compare(str[i])))
return false;
if(compare(str[i]) && (i <= length-1) && compare(str[i+1]))
return false;
if(compare(str[length-1]))
return false;
}
return true;
}

关于C++程序根据特定规则接受一个字符串(num opr num),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14745550/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com