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;
}

在此处查看输出

输出:

removewhitespace
4

4 回答 4

1

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

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

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

\a (alert) 在不改变活动位置的情况下产生有声或可见的警报。

于 2012-08-01T17:59:34.803 回答
1

它并没有删除空格,它只是用响铃字符替换它,大多数终端不会打印(相反,它们通常会产生挑剔的哔哔声)。

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

VIM 中显示的铃铛字符

于 2012-08-01T18:01:17.087 回答
0

\a是一个不可打印的字符 - 它会发出哔哔声。
因此,当空格字符被替换(就地)时\a,字符串被发送到printf()控制台,为每个这样的 bell-char 发出哔哔声,而不是移动一个空格。

于 2012-08-01T18:01:49.070 回答
0
  1. 停止状态(s[i]):特殊符号\0出现时停止。
  2. 它用未显示的符号替换所有空格。
于 2012-08-01T18:01:56.907 回答