[英]How to omit the dots, commas and white spaces for a string (needed for checking a palindrome)
我檢查回文(使用指針)的程序必須考慮幾種情況。
輸入可以是:
例如:輸入:女士,我是亞當輸出:回文輸入:?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.