簡體   English   中英

在字符串中查找空格和字母數字字符 C 語言

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM