如何从 C 中的字符串数组中删除空白元素?
How to remove blank elements from an array of strings in C?
我正在处理文件输入。我想将每一行存储为数组中的字符串。例如:如果文件有行:
This is line 1.
This is line 2.
This is line 3.
字符串应包含:
char str[][] = {"This is line 1.", "This is line 2.", "This is line 3."};
当我尝试使用额外的空格时:
This is line 1.
This is line 2.
This is line 3.
输出格式相同。
我想从我的句子数组中删除那些多余的空行,以便输出与以前相同。我应该怎么做?
[编辑] 我正在使用以下循环将句子从文件输入到数组:
while (fgets(str[i], LINE_SIZE, fp) != NULL)
{
str[i][strlen(str[i]) - 1] = '[=13=]';
i++;
}
您应该在 fgets
的调用中使用中间一维字符数组,例如
for ( char line[LINE_SIZE]; fgets( line, LINE_SIZE, fp) != NULL; )
{
if ( line[0] != '\n' )
{
line[ strcspn( line, "\n" ) ] = '[=10=]';
strcpy( str[i++], line );
}
}
如果一行可以包含空格,您可以按以下方式更改 if 语句的条件
for ( char line[LINE_SIZE]; fgets( line, LINE_SIZE, fp) != NULL; )
{
size_t n = strspn( line, " \t" );
if ( line[n] != '\n' && line[n] != '[=11=]' )
{
line[ n + strcspn( line + n, "\n" ) ] = '[=11=]';
strcpy( str[i++], line );
}
}
在上面的代码片段中,您可以替换此语句
strcpy( str[i++], line );
对于此语句,如果您希望字符串不包含前导空格。
strcpy( str[i++], line + n );
我正在处理文件输入。我想将每一行存储为数组中的字符串。例如:如果文件有行:
This is line 1.
This is line 2.
This is line 3.
字符串应包含:
char str[][] = {"This is line 1.", "This is line 2.", "This is line 3."};
当我尝试使用额外的空格时:
This is line 1.
This is line 2.
This is line 3.
输出格式相同。 我想从我的句子数组中删除那些多余的空行,以便输出与以前相同。我应该怎么做?
[编辑] 我正在使用以下循环将句子从文件输入到数组:
while (fgets(str[i], LINE_SIZE, fp) != NULL)
{
str[i][strlen(str[i]) - 1] = '[=13=]';
i++;
}
您应该在 fgets
的调用中使用中间一维字符数组,例如
for ( char line[LINE_SIZE]; fgets( line, LINE_SIZE, fp) != NULL; )
{
if ( line[0] != '\n' )
{
line[ strcspn( line, "\n" ) ] = '[=10=]';
strcpy( str[i++], line );
}
}
如果一行可以包含空格,您可以按以下方式更改 if 语句的条件
for ( char line[LINE_SIZE]; fgets( line, LINE_SIZE, fp) != NULL; )
{
size_t n = strspn( line, " \t" );
if ( line[n] != '\n' && line[n] != '[=11=]' )
{
line[ n + strcspn( line + n, "\n" ) ] = '[=11=]';
strcpy( str[i++], line );
}
}
在上面的代码片段中,您可以替换此语句
strcpy( str[i++], line );
对于此语句,如果您希望字符串不包含前导空格。
strcpy( str[i++], line + n );