[英]Find spaces and alphanumeric characters in a string C Language
嗨,我正在嘗試在 C 語言中構建 function 以檢查字符串是否包含數字、大寫和小寫以及空格,如果字符串包含任何其他字符,則返回 -ZC1C425268E68385D1AB5074F714。
float avg_word_len(char* str)
{
float check;
for (int i = 0; i < strlen(str); i++)
{
if (((str[i] >= '0') && (str[i] <= '9')&&(str[i] >= 'a') && (str[i] <= 'z') && (str[i] == ' ')&& (str[i] >= 'A') && (str[i] <= 'Z')))
check = 1;
else
check = -1;
}
str = '\0';
return check;
這是我的代碼,但 function 保持返回 -1 請幫助
您的一些&&
必須替換為||
因為一個字符是數字或小寫字母或空格或大寫字母,但不能同時是所有這些東西:
check = 1;
for (int i = 0; i < strlen(str); i++)
{
if (! (((str[i] >= '0') && (str[i] <= '9')) ||
((str[i] >= 'a') && (str[i] <= 'z')) ||
(str[i] == ' ') ||
((str[i] >= 'A') && (str[i] <= 'Z')))) {
check = -1;
break;
}
}
正如Weather Vane評論的那樣,很多&&
應該是||
s - 此外,括號應圍繞每個范圍(例如('0' <= str[i] && str[i] <= '9')
))。
要檢查字符是否在范圍內,我們使用 AND(即字符在下限之上和上限之下)。 要檢查字符是否在多個范圍之一中,我們使用 OR(即字符在范圍 1 中或在范圍 2 中或...)。
如果我們只解決這個問題,下面是if
條件的樣子:
(str[i] >= '0' && str[i] <= '9') || (str[i] >= 'a' && str[i] <= 'z') || (str[i] == ' ') || (str[i] >= 'A' && str[i] <= 'Z')
話雖如此,我建議在標准庫中使用來自ctype.h
的 function isalnum
,它檢查字符是否為字母數字。 它使代碼更簡單,並避免假設字符的排序方式是所有小寫字母都位於'a'
和'z'
之間(這在 ASCII 中是正確的 - 這是在實踐中使用的 - 但不是標准的)。
此外,我建議將check
初始化為-1
並在找到非字母數字、非空格字符后盡早從循環中中斷,這樣-1
以后不會被1
覆蓋(就像在當前版本的你的代碼)。
這就是它的樣子:
float check = -1;
for (int i = 0; i < strlen(str); i++)
{
if (!isalnum(str[i]) && str[i] != ' ') {
check = 1;
break;
}
}
您可以使用這三個 function,它們是在閱讀器中計數的#include <ctype.h>
isalpha :檢查字符是否為字母(大寫或小寫)。
isdigit :檢查字符是否為數字。
isblank :檢查字符是否為空白。
#include <ctype.h>
#include <stdio.h>
float avg_word_len(char* string)
{int check=-1;
for(int i=0;string[i]!='\0';i++)
{
if(isalpha(string[i])||isdigit(string[i])||isblank(string[i]))
{
check=1;
}
}
return check;
}
int main()
{
char string[150];
printf("Give me a text :");
scanf("%s[^\n]",string);
printf("\n%.f\n",avg_word_len(string));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.