我正在学习C但是我一直在努力创建一个程序。基本上我正在测试一个字符串是否只包含字母字符a-z
或A-Z
。
我做了什么:
strisalpha
的函数来执行此操作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字符,即使我没有。请有人能说清楚我做错了什么吗?感谢
答案 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()