2017-02-27 106 views
0

我正在学习C但是卡在我一直试图创建的程序中。基本上,我正在测试以查看字符串是否只包含字母字符a-zA-Z测试以查看一个字符串是否只包含字母数字

我做了什么:

  1. 定义的函数调用strisalpha做到这一点
  2. 叫我“试验台”的功能,它要求用户输入一个字符串

gcc编译器出了什么问题:

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

这是我的defi 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字符,即使我没有。请有人可以澄清我做错了什么?由于

+0

1)'loopPointer1 = 1; loopPointer1> stringLength;' - >'loopPointer1 = 0; loopPointer1 'integerCharValue = string [loopPointer1];' – BLUEPIXY

+1

什么是“字母数字”? – Olaf

+0

“gcc编译器出了什么问题” - 它不是写强烈不鼓励代码的编译器。 – Olaf

回答

0

的主要问题是你的for循环

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

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

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

然后检查每一个你不需要做任何事情给他们,你可以例如

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

感谢您的回应,克里斯。 –

+0

我注意到你用过的最后一行> ='A'。 在这个程序中,与==相比,> =有什么意义?它不仅仅是==吗? –

+0

它和你的'if(integerCharValue> = 65)'完全一样 - 如果我把'=='放在一起,那么当你想要“A”或者后面的一个字符时它只会匹配“A”你用'> ='得到了什么 –

0

atoi这样比较字符的字符是不是有什么你想在这里使用。 chars已经存储为数字ASCII值。您可以设置integerCharValue = string[loopPointer1]

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

另外,如果找到一封信,则不希望立即返回。拨打return将退出该功能并停止您的循环。你可能想要做的是寻找而不是字母的字符,如果找到的字符是return 0。然后,如果你把它放到循环结尾,你可以return 1,因为你知道你没有找到任何不是字母的字符。

0

这里是一个一行函数计算结果为1如果字符串只包含字母和0否则:

#include <string.h> 

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

这里是一个比较经典的方式用isalpha()

#include <ctype.h> 

int strisalpha(const char *str) { 
    while (*str) { 
     if (!isalpha((unsigned char)*str++) 
      return 0; 
    } 
    return 1; 
} 
相关问题