测试以查看字符串是否仅包含字母数字

时间:2017-02-27 17:45:52

标签: c type-conversion ascii

我正在学习C但是我一直在努力创建一个程序。基本上我正在测试一个字符串是否只包含字母字符a-zA-Z

我做了什么:

  1. 定义了一个名为strisalpha的函数来执行此操作
  2. 在我的“测试台”中调用该函数,该函数要求用户输入一个字符串
  3. gcc编译器出了什么问题:

    testBench1.c:21:28: warning: implicit declaration of function 'atoi' [-Wimplicit-function-declaration]
         integerCharValue = atoi( string[loopPointer1] );
    

    这是我对strisalpha的定义:

    int strisalpha(char *string)
    {
        int stringLength = 0;
        int loopPointer1 = 0;
        int integerCharValue = 0;
        int dummyArgument = 0;
    
        /* Get length of string */
        stringLength = strlen (string);
        printf("\nString length is: %d", stringLength);
    
        /* ASCII Codes In Decimal */
           A (65Decimal) to Z(90Decimal) and
           a (97Decimal) to z (122Decimal)
    
        Set up a loop and query if ASCII alphabetic character
        */
        for (loopPointer1 = 1; loopPointer1 > stringLength; loopPointer1++ )
        {
    
        /* Convert character to integer */
        integerCharValue = atoi( string[loopPointer1] );
        printf ("%d \n", integerCharValue);
        if (integerCharValue >= 65)
            if (integerCharValue <= 90)
            return 1;  /* Upper case alphabetic character, so OK */
            else if (integerCharValue >= 97)
                if (integerCharValue <= 122)
                return 1; /* Lower case alphabetic character, so OK */
                else
    

    结果总是说我输入了一个ASCII字符,即使我没有。请有人能说清楚我做错了什么吗?感谢

3 个答案:

答案 0 :(得分:0)

主要问题是你的for循环

for (loopPointer1 = 1; loopPointer1 > stringLength; loopPointer1++ )

C中的数组从0开始,中间部分定义循环是否应该继续不完成。所以你想要的是:

for (loopPointer1 = 0; loopPointer1 < stringLength; loopPointer1++ )

然后检查每个角色你不需要对它们做任何事情,因为你可以比较像这样的字符

if (string[loopPointer] >= 'A')

答案 1 :(得分:0)

atoi不是您想要在这里使用的内容。 chars已存储为数字ASCII值。您只需设置integerCharValue = string[loopPointer1]

您的loopPointer1从1开始,因此您将跳过字符串中的第一个字符。在C中,索引从0开始。

另外,如果您找到一封信,您也不想立即返回。调用return将退出该函数并停止循环。您可能想要做的是查找字母的字符,如果找到字符则查找return 0。然后,如果你到了循环结束,你可以return 1,因为你知道你没有找到任何不是字母的字符。

答案 2 :(得分:0)

这是一个单行函数,如果字符串只包含字母字符,则评估为1,否则为0

#include <string.h>

int strisalpha(const char *str) {
    return str[strspn(str, "abcdefghijklmnopqrstuvwxyz"
                           "ABCDEFGHIJKLMNOPQRSTUVWXYZ")] == '\0';
}

这是一个更经典的方法[{1}}:

isalpha()