我可以知道是否有任何方法可以從C中的字符串中刪除非字母符號?C:刪除字符串中的符號
比如我有一個char array[5][5]
有:"hi", "my..", "name", "is,,", "bob!"
所需的輸出:"hi", "my", "name", "is", "bob"
反正是有刪除的符號?
我可以知道是否有任何方法可以從C中的字符串中刪除非字母符號?C:刪除字符串中的符號
比如我有一個char array[5][5]
有:"hi", "my..", "name", "is,,", "bob!"
所需的輸出:"hi", "my", "name", "is", "bob"
反正是有刪除的符號?
這裏是一個非常簡單的實現:
void keepalnum(char *src) {
unsigned char *dest = src;
while ((*dest = *src++))
dest += isalnum(*dest) ? 1 : 0;
}
的想法是超前的源指針每個副本後,但只有當你看到一個字母數字字符移動目標指針。
這裏是你如何使用它:
char str[] = "quick-brown fox jumps? over the.. lazy dog!";
keepalnum(str);
printf("%s\n", str);
quickbrownfoxjumpsoverthelazydog
這當然不是我爲初學者提供的那種代碼......也不是我自己寫的那種代碼。它甚至是越野車,因爲人們不應該把字符傳給isalnum。更直接,沒有額外的商店和錯誤(抱歉,沒有格式):'unsigned char c; while((c = * srC++)!='\ 0')if(isalnum(c))* dest ++ = c; * dest ='\ 0';' –
@JimBalter我的解決方案與K&R第5章中的'strcpy'的最新版本沒有多大區別。我相信任何想用C語言編程的人都需要對K&R有深入的瞭解。但是我試圖避免設置太高的代碼:例如,在我的代碼中,我更喜歡'dest + =! !isalnum(* dest)'而不是三元運算符,但是一次去除會消耗太多。 – dasblinkenlight
因爲在K&R的第一版發佈之前,我一直在寫C代碼。這是一個很好的資源,但不是編碼技術的最後一個字。而且你的代碼不會通過我的評論甚至我的面試。 –
使用C isalnum(int ch);
您可以刪除既不是數字也不人物像這樣的過濾器值:
#include <stdio.h>
#include <string.h>
#define ARRAY_LEN 5
#define STR_LEN 5
int main(int argc, char *argv[])
{
int rc = 0;
char array[5][5];
char out_str[5] = {0};
int array_idx, str_idx, cpy_idx;
strcpy(array[0], "hi");
strcpy(array[1], "my..");
strcpy(array[2], "name");
strcpy(array[3], "is,,");
strcpy(array[4], "bob!");
for(array_idx=0; array_idx < ARRAY_LEN; array_idx++)
{
cpy_idx = 0;
for(str_idx=0; str_idx < STR_LEN; str_idx++)
{
if(isalnum(array[array_idx][str_idx]))
{
out_str[cpy_idx++]= array[array_idx][str_idx];
}
}
out_str[cpy_idx++] = '\0';
printf("%s ", out_str);
}
printf("\n");
return rc;
}
這個例子沒有結束邊界檢查,因爲例子wa s圍繞4個字符的字符串編碼加上終止0.實際上,我聲明的緩衝區大於我打算處理的最大字符串,但我仍然計算被複制的字符數,這在這裏沒有完成。
是的,有一種方法。我建議你盡力去做,看看你在提問之前想出了什麼,其目的不是爲你寫代碼。但是,爲了幫助您,請查看ctype.h –
順便說一句,這是http://stackoverflow.com/questions/6433866/how-to-find-non-alphanumeric-in-c我找到了通過搜索SO [c]字母數字 –