![](/img/trans.png)
[英]Implementing isalpha(const char *s) - how to improve this function?
[英]How to make a function that iterates an isalpha function work?
我有一個程序,使用isalpha
比較字符串中的每個元素。 我輸入了一個字符串,它調用該函數以遍歷數組並檢查所有字符是否都是字母。 如果是,則輸出true和false。 我的問題是我似乎無法使其正常工作。 每次只會返回false。
#include <stdio.h>
#include <string.h>
int isAlpha(char string[]);
int main()
{
char str[100];
int bool;
printf("Enter a string to check: \n");
fgets(str, 100, stdin);
bool = isAlpha(str);
if(bool != 0)
{
printf("True\n");
}
else if(bool == 0)
{
printf("False\n");
}
return 0;
}
int isAlpha(char string[])
{
int i, check, len = strlen(string);
for(i = 0; i < len; i++)
{
if(isalpha(string[i]))
{
check = 1;
}
else
{
check = 0;
break;
}
}
return check;
}
如果用戶輸入abc
,則從fgets
返回的字符串將為abc\\n\\0
。 換句話說,換行符始終無法通過isalpha
測試。 您可以通過從字符串長度中減去一個來解決此問題。 您還應該初始化check
變量,因為循環的主體可能永遠不會運行,例如,如果用戶在不鍵入任何內容的情況下按下Enter鍵。
int i, check = 0;
int len = strlen(string) - 1;
for(i = 0; i < len; i++)
正如@ShadowRanger在注釋中指出的那樣,C語言中沒有簡單的事情。為了絕對安全,您應該從字符串中刪除換行符,如下所示
int i, check = 0;
string[strcspn(string, "\n")] = '\0';
int len = strlen(string);
for(i = 0; i < len; i++)
嘗試這個
int isAlpha(char string[])
{
int i = 0, len = strlen(string);
for(i = 0; isalpha(string[i]); i++); // cycle through string until characters are alphabet characters
return i == len - 1;
/* this has to be true if all characters are alpha */
}
要解決您的問題,請執行以下操作:
for(i = 0; i < len - 1; i++)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.