- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
你好指的是同一个问题但是不同的代码。
Replacing multiple new lines in a file with just one
int main(void){
format();
printf("\n");
return 0;
}
void format(){
int c;
size_t nlines = 1;
size_t nspace = 0;
while (( c= getchar()) != EOF ){
/*TABS*/
if(c == '\t'){
c = ' ';
}
/*SPACES*/
if (c ==' '){
if(nspace > 0){
continue;
}
else{
putchar(c);
nspace++;
nlines = 0;
}
}
/*NEW LINE*/
else if(c == '\n'){
if(++nlines >2){
continue;
}
else {
nlines++;
nspace = 0;
}
putchar(c);
}
else{
putchar(c);
nspace = 0;
nlines = 0;
}
}
}
我想将多个空行压缩成一个空行,但它似乎不起作用,在标准输出的 Cygwin 终端上,最后一行给了我额外的空行,尽管输入末尾没有空行.
例如
输入
Hello Hi\n
\n
\n
Hey\t\tHola\n
期望的输出
Hello Hi\n
\n
Hey Hola\n
实际输出
Hello Hi\n
Hey Hola\n
请解释!
最佳答案
这是您的代码的一个变体。我删除了 format()
函数(这对我来说很不寻常,因为 SO 上的大多数程序都没有使用足够的函数)将它直接合并到 main()
中。该代码现在更加对称地处理空格和换行符,修复了 paddy 中也确定的双增量问题。的 answer .如果末尾还没有换行符,它也只会在末尾打印出一个换行符。这规范化了不以换行符结尾的文件。 nlines = 1;
的初始化处理文件开头的多个换行符——这已经做得很好了。
#include <stdio.h>
int main(void)
{
int c;
size_t nlines = 1;
size_t nspace = 0;
while ((c = getchar()) != EOF)
{
if (c == '\t')
c = ' ';
if (c == ' ')
{
if (nspace < 1)
{
putchar(c);
nspace++;
nlines = 0;
}
}
else if (c == '\n')
{
if (nlines < 2)
{
putchar(c);
nlines++;
nspace = 0;
}
}
else
{
putchar(c);
nspace = 0;
nlines = 0;
}
}
if (nlines == 0)
putchar('\n');
return 0;
}
我的测试使用了一些特定于 Bash 的符号。我的程序是 sb73
:最后一个测试输入不包括最终换行符。输出使用 ⌴ 指示输出中的换行符:
$ echo $'Hello Hi\n\n\nHey\t\tHola\n' | sb73
Hello Hi⌴
⌴
Hey Hola
⌴
$
和:
$ echo $'\n\nHello Hi\n\n\n Hey\t\tHola\n' | sb73
⌴
Hello Hi⌴
⌴
Hey Hola⌴
⌴
$
和:
$ printf '%s' $'\n\nHello Hi\n\n\n Hey\t\tHola' | sb73
⌴
Hello Hi⌴
⌴
Hey Hola⌴
$
注释指出上面的代码在 Cygwin 终端上不起作用,合理的原因是被修改的数据有 CRLF 行结尾。有多种解决方法。一个是找到一种强制标准输入进入文本模式的方法。在文本模式下,CRLF 行结尾应映射到输入时的 Unix 样式 '\n'
(仅限 NL 或 LF)结尾,而 Unix 样式行结尾应映射到输出时的 CRLF 行结尾.
或者,可以简单地忽略 CR 字符:
--- sb73.c 2017-06-08 22:04:28.000000000 -0700
+++ sb47.c 2017-06-08 22:40:24.000000000 -0700
@@ -19,6 +19,8 @@
nlines = 0;
}
}
+ else if (c == '\r')
+ continue; // Windows?
else if (c == '\n')
{
if (nlines < 2)
这是一个“统一差异”,在代码中显示了额外的两行。或者可以将 CR 后面没有跟随 LF 作为常规字符处理,而处理 CR 后面跟着 LF 作为换行符组合:
--- sb73.c 2017-06-08 22:04:28.000000000 -0700
+++ sb59.c 2017-06-08 22:42:43.000000000 -0700
@@ -19,6 +19,17 @@
nlines = 0;
}
}
+ else if (c == '\r')
+ {
+ if ((c = getchar()) == '\n')
+ {
+ ungetc(c, stdin);
+ continue;
+ }
+ putchar('\r');
+ nspace = 0;
+ nlines = 0;
+ }
else if (c == '\n')
{
if (nlines < 2)
可能有一种方法可以编写处理 CR 的状态机,但那样会更复杂。
我有一个 utod
程序可以将 Unix 风格的行结尾转换为 Windows 风格;我在管道中使用它来测试代码的新变体。
关于c - C中将空行压缩为一个空行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44449124/
我想用 python 读取串行端口,并用 readline 打印结果,但我在所有结果行之间得到空行。你能告诉我如何删除所有空行吗? 我的代码: #!/usr/bin/python import ser
我正在编写一个程序,该程序存储用户输入的数字,但如果输入空白则退出。 我尝试将其设为字符数组并检查长度。如果长度大于0,则表示有输入,因此它将存储输入。如果长度为0,则表示没有输入,因此退出循环。 d
这个项目要求我通过取出所有注释、空行、额外的空格和括号中的信息来读取处理中的文件,然后将其打印到output.txt中。我在处理数据和删除所有注释、空行、额外的空格和括号中的信息时遇到了麻烦。 这是我
有没有办法从服务器响应中删除空行?我已经尝试过: trimSpaces true 和 这没有正确解决问题,因为在 init param 方法中它甚至删除了
你好, if('\t' == input [0] ||'\v' == input [0] ||'\r' == input [0] ||'\n' == input [0] || '\0' == in
我不知道如何用语言来解释这个场景。所以我在写例子: 我有一个名为 tblType 的表: type_id | type_name --------------------- 1 |
代码如下: <?php /* *读取文件内容至字符串中,同时去除换行、行首行尾空格。 */ header("Content-type: text/html; chars
我正在将行与两个文本文件的行进行比较,ref.txt (引用)和 log.txt .但是我想忽略任一文件中的任意数量的空行;我怎样才能做到这一点? ref.txt one two three end
关于删除jtable中未使用的行的问题我正在使用DefualtTableModel我的表已经有一些数据并且当我更新它时将一些列留空以稍后更新主题,以便它们是空列..我想在保存数据之前用按钮删除主题..
我看到列表,它有适量的行(根据 QStringList 中的元素数量),但行是空的。 我做错了什么? 在 C++ 中我的代码是: QStringList s; s.append("1"); s.app
我怎样才能从这些行中隐藏 UITableView 的行,什么是不使用的。例如,看截图: 我可以只显示 4 行并隐藏其他未使用的行吗?所以,我只显示 4 行,然后是白屏,而不是现在的行 最佳答案 喜欢将
对于我的 bash/html 中的 CGI,我有这个脚本(只是 awk 脚本,其余代码只是一个简单的 hmtl 代码): for fn in /var/www/cgi-bin/LPAR_MAP/*;
一直在尝试使用输出 html 方法转换 xml 文档,以便使用 xsl 样式表(使用 CSS)在浏览器中显示。想显示以下代码 Source A Co
我想在我的 LOG 语句之后添加一个空行,以使我的日志更加分隔和可读。 我该怎么做? 当前声明: LOGGER.info("Person's name is {} .", person.getNa
我正在执行以下假脱机语句: SET VERIFY OFF SET FEEDBACK OFF SET HEADING OFF SET TRIMSPOOL ON SET TERM OFF SPOOL &p
包含五个相关字段的表格; ID (Autoincrement,unique, etc) ID_customer - ties in each row to another table with cus
我有这样的风格: #cytoscape-container { width: 100%; height: 100%; margin: 0 aut
while((fscanf(datafile, " %127[^;] %[^\n]", name, movie)) == 2) { printf("%s\n", movi
我有这个two commands获取 SID 用户帐户 wmic useraccount where name='%username%' get sid | findstr /b /C:"S-1" >
我使用这段代码: window.removeDuplicateLines = function() { "use strict"; var bodyText = $('#text-area')
我是一名优秀的程序员,十分优秀!