簡體   English   中英

如何省略字符串的點,逗號和空格(檢查回文所需)

[英]How to omit the dots, commas and white spaces for a string (needed for checking a palindrome)

我檢查回文(使用指針)的程序必須考慮幾種情況。

輸入可以是:

  1. 一個符號/字母(完成)
  2. 帶有大寫/小寫字母的單詞(完成)
  3. 一堆符號; 如果只有符號,那么它總是一個回文(完成)
  4. 如果輸入太大(> 80),那么它不是回文(我需要使用fgets,我設法完成)
  5. 字母和符號的組合,如果是這樣,那么只計算字母(STRUGGLING WITH)
  6. 一個帶有白色和逗號的句子(STRUGGLING WITH) - >為了獲得輸入,由於案例4,我被提示僅使用fgets函數。我仍然無法將輸入字符串轉換為所需的形式

例如:輸入:女士,我是亞當輸出:回文輸入:?aa! 輸出:回文

我已經設法使用指針創建回文函數,將字符串中的可能字母轉換為全小寫,如果字符串僅由符號組成,則顯示“回文”。

我怎么能設法變換,例如:

char str[80] = "Madam, I'm Adam";

成:

str[80] = "madamimadam";

只需咀嚼整個字符串,然后以更方便的格式創建一個新字符串。 在與案例轉換相同的地方:

#include <ctype.h>

void format (char* dst, const char* src)
{
  size_t i=0;

  while(*src != '\0')
  {
    char ch = tolower(*src);
    if(isalpha(ch))
    {
      *dst = ch;
      dst++;
    }
    src++;
  }
}

如果因某些人為原因無法使用isalpha ,您可以自己輕松創建。 這是一個快速,便攜的查找表版本:

#include <stdbool.h>

bool my_isalpha (char ch)
{
  static const bool ALLOWED[256] =
  {
    ['A'] = true;
    ['B'] = true;
    ['C'] = true;
    ...
  };

  return ALLOWED[ch];
}

相同函數的朴素版本只是檢查if(ch >= 'A' && ch <= 'Z') ,僅假設為大寫。 這對於學生作業來說可能沒問題,但對於生產質量代碼則沒有。 由於C標准無法保證符號表中的字符相鄰。 無論如何,查找表版本的運行速度要快得多,因此沒有理由不在專業程序中使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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