贝尔字符(\ a)删除空格

时间:2012-08-01 17:57:19

标签: c

此程序如何移除空格?:

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

4 个答案:

答案 0 :(得分:1)

\a是一个非图形字符,您的程序用\a非图形字符替换字符串中的所有空格。

从标准(强调我的)看这里:

  

(C99,5.2.2p2)执行字符集中表示非图形字符的字母转义序列旨在按如下方式在显示设备上产生操作:

     

\ a (警报)生成声音或可见警报而不更改有效位置

答案 1 :(得分:1)

它不是删除空格,而是用贝尔字符替换它,而大多数终端都不会打印它(相反,它们通常产生一种苛刻的哔哔声)。

虽然在终端上不可见,但这些字符显然是在标准输出上写的,所以如果你重定向到文件输出你的程序,它们将被写入磁盘,并且可以与大多数编辑一起显示。

The bell characters displayed in VIM

答案 2 :(得分:0)

\a是一个不可打印的角色 - 它会发出哔哔声 因此,当空格字符被\a替换(就地),并且字符串被发送到printf()时,控制台会发出蜂鸣声,而不是移动单个空格。

答案 3 :(得分:0)

  1. 在停止(s[i])的情况下:当特殊符号\0到来时停止。
  2. 用未显示的符号替换所有空格。