如何读取char argv输入并解析(检查)它是否为非整数
How to read an char argv input and parse(check) it for non-integers
说我的命令行是a.out -a 3eF6
如果我访问argv[2],它会给我3eF6(我认为这是一个字符数组?)我如何循环检查每个字符都是整数,而不是像'e'或'F'这样的alpha值?
如何/如何将其转换为字符串?
我知道如果我做a = atoi(argv[2])
,其中argv[2]
是32,那么a = 32。我也知道,如果argv[2]
是3eF6,那么以下不会导致"输入错误"。
a = 0;
a = atoi(argv[2])
if( a = 0 )
cout << "wrong input";
相反,a
将被计算为3。所以在这个例子中它只读取第一个整数,但是我想要能够访问整个参数,3eF6。
我已经尝试使用atoi(getline(argv[2], a),或等效的东西,但由于某种原因,我得到一个错误,说我不能转换字符串为const char。
无论如何,我如何将argv[2]转换为我可以解析的字符串?或者如何访问argv[2]中的每个字符?我也试过了:
string string1 = argv[i+1] // argv[i] is an option like -a
但是在带参数运行程序时,我得到这个错误:
./a.out -b 2 -a 2 -s 2 -t 8
抛出std::logic_error实例后调用终止what(): basic_string::_S_construct NULL无效Abort (core dump)
TCHAR c;
int n(0);
int x(0);
int y(0);
for (x = 0; x < argc; ++x)
{
// Loop through each character in the argument.
n = _tcslen(argv[x]);
for (y = 0; y < n; ++y)
{
c = argv[x][y];
if (isdigit(c))
{
cout << c << "is a digit" << endl;
}
else
{
cout << c << "is not a digit" << endl;
}
}
}
最后,我创建了一个char指针来保存我的char命令行元素:
char* charString = argv[i+1];
传递给一个函数来解析
parser(charString);
在这种情况下,argv[i+1]相当于我问题中的argv[2]。我的解析器函数的函数定义如下所示:
void parser(char* charString){
for(int i=0; charString[i] != ' '; i++){
bool isAlpha = isalpha(charString[i]);
bool isPunct = ispunct(charString[i]);
if ((isAlpha == true)||(isPunct == true)){
printError();
exit(1);
} else;
}
}
重要的是要注意,要在char数组的末尾结束解析,不能执行
for(int i=0; charString[i] < sizeof(charString); i++){
作为数组大小将总是返回8或9。相反,必须在求值的字符等于' '时结束解析,或者换句话说,在字符charString[i]不等于' '时进行解析。
相关文章:
- 检查是否以特定精度给出双精度
- 地图计数确实很重要,或者只是检查是否存在
- 检查是否安装了 windows10 C++
- 模板化检查是否存在带有参数列表的类成员函数?
- 如何巧妙地编写两个函数——一个用于检查是否存在解决方案,另一个用于获取所有解决方案
- MPI:检查是否有任何进程已终止
- 给定一个大小为 N 的数组 S,检查是否可以将序列拆分为两个序列
- Vulkan 的传输队列系列功能和显卡支持:条件检查是否准确?
- 如何检查是否定义了固定宽度的整数
- 使用预处理指令检查是否包含标头?
- 在预处理器中检查 g++ 是否使用 -fopenmp 调用
- 将字符串转换为整数类型T,检查是否存在溢出
- C++编译时检查是否可以用某种类型的参数调用重载函数
- 检查是否至少设置了一点而不跳跃
- 在if条件下,右或左改变值的相等性检查是否有任何区别
- C++ 检查是否按下了键,而不是按住了
- 如何在 c++ 中解析包含整数的字符串并检查是否大于最大值
- 检查是否为质数大o
- 检查是否需要 utf8 转换并转换为 utf8
- 如何正确检查 c++ 是否存在注册表项?