2012-08-01 83 views
1

這個程序的工作原理去除空白?:貝爾字符(一)刪除空白

int main() 
{ 
    char s[]="remove white  space"; 
    int i; 
    for(i=0;s[i];++i) 
      if(s[i]==' ') 
        s[i]='\a'; 
    printf("%s",s); 
    return 0; 
} 

見輸出here

輸出:

removewhitespace 
+2

鈴鐺字符通常是一個看不見的控制字符,還有其他一些字符。 – chris 2012-08-01 17:58:02

回答

1

這並不是刪除空格,它只是將其替換爲不是由大多數終端打印的鈴音(相反,它們通常會產生一個挑剔的嘟嘟聲)。

雖然在終端上看不見,但這些字符顯然寫在標準輸出上,所以如果你重定向到文件輸出你的程序,它們將被寫入磁盤,並可以顯示大多數編輯器。

The bell characters displayed in VIM

1

\a是一個非圖形字符,你的程序用\a非字符字符替換字符串中的所有空格。

看到這裏從標準(重點煤礦):

(C99,5.2.2p2)在執行字符集表示非圖形字符字母轉義序列旨在如下以產生在顯示設備上的操作:

\一個(警報)產生可聽或可視警報不改變活性位置

0

\a是一個非打印字符 - 它使蜂鳴聲。
因此,當\a替換(就地)空格字符並將字符串發送到printf()時,控制檯會發出嗶嗶聲,不會移動單個空格。

+0

我一直使用sed來擺脫空白。例如,'sed -e -i's/[:space:] // g'$ file',所以如果您使用'printf()'打印^ G, – technerdius 2015-12-07 15:47:36

0
  1. 在停止的情況下(s[i]):當特殊符號\0到來時停止。
  2. 它將所有空格替換爲未顯示的符號。