Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C中检查字符串中的非字母字符_C_For Loop_If Statement - Fatal编程技术网

如何在C中检查字符串中的非字母字符

如何在C中检查字符串中的非字母字符,c,for-loop,if-statement,C,For Loop,If Statement,下面的代码(编译得很好)检查命令行输入中的非字母字符,但是我觉得应该有更好的方法来编写它。例如,您可以看到在检查字符串中每个字符的核心if语句中没有执行的代码。是否有办法检查其中一个字符是否不是字母字符并抛出错误,而不是在else函数中出错 int main(int argc, string argv[]){ // terminate program if more than one key if(argc != 2){ printf("error");

下面的代码(编译得很好)检查命令行输入中的非字母字符,但是我觉得应该有更好的方法来编写它。例如,您可以看到在检查字符串中每个字符的核心if语句中没有执行的代码。是否有办法检查其中一个字符是否不是字母字符并抛出错误,而不是在
else
函数中出错

int main(int argc, string argv[]){

    // terminate program if more than one key
    if(argc != 2){

        printf("error");
        return 1;

    // check to ensure key characters are alphabetical
    } else {
        for(int h = 0; h < strlen(argv[1]); h++){
            if(isalpha(argv[1][h])){

            } else {
                printf("error");
                return 1;
            }
        }
    }
}
intmain(intargc,字符串argv[]){
//如果有多个键,则终止程序
如果(argc!=2){
printf(“错误”);
返回1;
//检查以确保关键字符按字母顺序排列
}否则{
对于(inth=0;h
是的,您可以反转if条件,这是这些情况下的一般解决方案

int main(int argc, string argv[]){

    // terminate program if more than one key
    if(argc != 2){

        printf("error");
        return 1;

    } else {
        // check to ensure key characters are alphabetical
        for(int h = 0; h < strlen(argv[1]); h++){
            if(!isalpha(argv[1][h])){
                printf("error");
                return 1;
            }
        }
    }
}
intmain(intargc,字符串argv[]){
//如果有多个键,则终止程序
如果(argc!=2){
printf(“错误”);
返回1;
}否则{
//检查以确保关键字符按字母顺序排列
对于(inth=0;h
是的,您可以反转if条件,这是这些情况下的一般解决方案

int main(int argc, string argv[]){

    // terminate program if more than one key
    if(argc != 2){

        printf("error");
        return 1;

    } else {
        // check to ensure key characters are alphabetical
        for(int h = 0; h < strlen(argv[1]); h++){
            if(!isalpha(argv[1][h])){
                printf("error");
                return 1;
            }
        }
    }
}
intmain(intargc,字符串argv[]){
//如果有多个键,则终止程序
如果(argc!=2){
printf(“错误”);
返回1;
}否则{
//检查以确保关键字符按字母顺序排列
对于(inth=0;h
字符串通常很短,但为循环条件调用strlen()ina是一个坏习惯。它是O(N平方),因为每次迭代都会扫描整个字符串

像这样编写函数

int allalpha(const char *str)
{
   size_t i;
   for(i=0;str[i];i++)
     if(!isalpha(str[i]))
        return 0;
   return 1;
}
那么大体上

if(!allalpha(argv[1]))
{
   /* non all-alpha error handling code here */
}

字符串通常很短,但为循环条件调用strlen()是一个坏习惯。它是O(N平方),因为每次迭代都会扫描整个字符串

像这样编写函数

int allalpha(const char *str)
{
   size_t i;
   for(i=0;str[i];i++)
     if(!isalpha(str[i]))
        return 0;
   return 1;
}
那么大体上

if(!allalpha(argv[1]))
{
   /* non all-alpha error handling code here */
}

您熟悉
运算符?如果(!isalpha(argv[1][h])
,或者我遗漏了什么,为什么不
?顺便说一句,在
字符串argv[]
中的
字符串是什么?@KenY-N应该是
字符*
?在这种情况下,我应该如何迭代
char*
数组以检查每个数组是否按字母顺序排列
for(inth=0;h
?'h熟悉吗运算符?如果(!isalpha(argv[1][h])
,或者我遗漏了什么,为什么不
?顺便说一句,在
字符串argv[]
中的
字符串是什么?@KenY-N应该是
字符*
?在这种情况下,我应该如何迭代
char*
数组以检查每个数组是否按字母顺序排列<代码>对于(inth=0;h
?'h
运算符是一个布尔一元运算符,它将接受任何布尔条件并反转其值。现在,在C语言中布尔实际上只是整数,所以在实践中,对于非零输入(true),它将产生0(false),对于零输入(false),它将产生1(true)
运算符是一个布尔一元运算符,它将接受任何布尔条件并反转其值。现在,在C语言中,布尔实际上只是整数,所以在实践中,对于非零输入(true),它将产生0(false),对于零输入(false),它将产生1(true)。