【发布时间】:2015-03-29 15:48:47
【问题描述】:
我正在用 Brian W. Kernighan 和 Dennis M. Ritchie 编写的“C 编程语言”第二版进行练习。
练习 1.9 让我很困惑。所以这里是:
“编写一个程序将其输入复制到输出,用一个空格替换每个空格的字符串”。
我对此感到困惑。我在这里发布我的问题是因为其他学习者没有像我想做的那样做这个练习。就是这里,用-代表一个空白:
Input: ----hello
Output: -hello
但我想要这个:
Input: ----hello
Output: ----hello
Input: ----
Output: -
这是我的程序:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int character; /* input character */
int non_blank = 0; /* is any non blank character */
while ((character = getchar()) != EOF) {
if (character != '\n') {
putchar(character);
if (character != ' ') {
non_blank = 1;
}
}
else {
if (non_blank == 0 ) {
putchar('\b'); /* go to previous line (blabla\n|cursor|) (blabla|cursor|\n) */
putchar('\r'); /* carriage return */
putchar(' '); /* put one space */
putchar('\0'); /* and put the end of line */
}
non_blank = 0;
}
}
return EXIT_SUCCESS;
}
但空格不会被删除。
Input: ------|\n
Output: -|-----
这是我对转义序列的实验:
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("bbbbbbbbbbbbbbb");
putchar('\b'); /* jump to previous line */
putchar('\r');
putchar('b');
putchar('\0');
return EXIT_SUCCESS;
}
| 是一个游标。
Output: b|
但是当我添加换行符时,它不起作用。如何使其与换行符一起使用?
【问题讨论】:
-
你尝试解决这个练习还是自己发明?
-
你确定你理解这个问题吗?我相信练习是要求您用单个空格替换大于 1 的空格序列,因此“test...test”变为“test.test”,其中“.”是空间的替身。您的“我想要这个”部分似乎不同意。
-
当我第一次阅读本书俄语版的练习时,我意识到我应该将每个只包含空格的字符串替换为一个空格。当我用英文阅读练习时,我也意识到了这一点。你能帮我解释一下运动吗?
-
许多操作系统中的 '\r' 会导致光标移动到下一行,而不仅仅是当前行的开头。您可以使用转义序列将光标移动到上一行的开头,但它们不适合本练习。
-
感谢大家的帮助。并特别感谢帮助使问题更清晰的编辑。
标签: c escaping kernighan-and-ritchie