C++ isalpha:如果argv不是字母表。如何设定条件?
我制作了一个程序,它接受两个命令行参数,其中第一个参数是文件名本身,第二个是字母关键字。如果我必须拒绝任何数值参数,我该如何设置条件,或者写什么 我的伪代码: 如果argv[1]不是字母表,则拒绝它(返回1) 我该怎么做?对不起,我是计算机编程的新手,尤其是C 编辑:第二个参数是字符串。我必须检查用户是否输入了字符串而没有数字值。如果用户输入一个数字,或者一个带有数字的字符串(比如bacon11),我的程序应该拒绝它并返回1;我该怎么办 我的代码如下所示:C++ isalpha:如果argv不是字母表。如何设定条件?,c++,c,C++,C,我制作了一个程序,它接受两个命令行参数,其中第一个参数是文件名本身,第二个是字母关键字。如果我必须拒绝任何数值参数,我该如何设置条件,或者写什么 我的伪代码: 如果argv[1]不是字母表,则拒绝它(返回1) 我该怎么做?对不起,我是计算机编程的新手,尤其是C 编辑:第二个参数是字符串。我必须检查用户是否输入了字符串而没有数字值。如果用户输入一个数字,或者一个带有数字的字符串(比如bacon11),我的程序应该拒绝它并返回1;我该怎么办 我的代码如下所示: // Reject numeric
// Reject numeric value
for (int i = 0, n = strlen(argv[1]); i < n; i++)
{
if //TODO: if letter is not a letter reject it.
{
return 1;
}
}
//拒绝数值
对于(inti=0,n=strlen(argv[1]);i
我应该在待办事项行写什么?我不能限制代码 您可以使用该功能
编辑:您的代码似乎运行良好。尽管如此,我不会做你的工作,但我可以给你一些线索
- 检查以理解if语句(您也可以检查示例)
- 不要忘记argv是一个二维字符数组。因此,要获得参数的特定字符,可以执行以下操作:
argv[i][j]
- 检查函数的返回值以测试字符
- 从最普遍的意义上讲,这可能是一个棘手的问题,因为
“字母”的定义可能取决于语言环境,并且将
取决于环境使用的编码;如果编码
如果是UTF-8(今天的常见情况),可能会非常困难,因为
您必须处理多字节字符
另一方面,您声明第二个参数是
按字母顺序排列的关键字。如果有固定数量的关键字
(除此之外,它们不会是关键字),这是最简单的解决方案
只是在关键字表中查找参数;如果你
找不到,这是个错误。比如:
static std::string keywords[] =
{
"keyword1",
"keyword2",
// ...
};
if ( std::find( std::begin( keywords ), std::end( keywords ), argv[2] )
== std::end( keywords ) ) {
// Error, keyword not found.
}
或者,如果你说的是“字母”,你指的是字母表中26个字符中的一个
英语字母表(可排除重音字符,或
西里尔语,或汉语,或诸如此类的),这通常是
如果一个人只关心关键词,那么你可以
使用isalpha
功能(当然正确):
如前所述,这只适用于C++11;使用旧版本的
C++,它更复杂。而且非常有限;通常情况下
一个有经验的C++程序员首先要做的是设置全局
将区域设置设置为其用户的区域设置,这可能不是“C”。欢迎使用StackOverflow。最好的方法是通过一本关于C或C++的好书(你需要决定你所学的两种语言中的哪一种,它们是不同的语言),并学习基础知识。对于C,我推荐《C编程语言》,这是一本由语言作者编写的非常容易理解的书。请注意:
argv[1]
是第一个参数,argv[2]
是第二个参数;也许你需要检查argv[2]?@anatolyg:计算机从0开始索引。是吗?举个例子就好了,因为isalpha
需要int
@juanchopanza你看过链接了吗?这里有一个例子。@PomfCaster这个例子当然是不正确的,如果文本不是常量,就会导致未定义的行为。对这个问题的一些编辑:第二个参数是字符串。我必须检查用户是否输入了字符串而没有数字值。如果用户输入一个数字,或者一个带有数字的字符串(比如bacon11),我的程序应该拒绝它并返回1;我该怎么办?我的代码如下所示://Reject numeric value for(inti=0,n=strlen(argv[1]);iif ( std::find_if( argv[2], argv[2] + strlen( argv[2] ),
[]( unsigned char ch ) { return !isalpha( ch ); } )
!= argv[2] + strlen( argv[2] ) ) {
// Error, non alphabetic found...
}