【问题标题】:RE: remove empty lines/blank strings from array in C [closed]RE:从 C 中的数组中删除空行/空白字符串 [关闭]
【发布时间】:2014-11-03 14:03:43
【问题描述】:

关于莫斯科代码中的@Vlad: copy 2 arrays into 1 array, in C prog

如果他的代码以这种方式编辑,有谁知道如何删除空行:

#include <stdio.h>
#include <string.h>

int main(void) 
{
size_t i;
    char ar1[3][10]={"a","b","c"};
    char ar2[3][10]={"d","e","f"};
    char ar3[10][10];

    memcpy( ar3, ar1, sizeof( ar1 ) );
    memcpy( ar3 + 5, ar2, sizeof( ar2 ) );  

    for (i = 0; i < 10; i++ )
    {
        puts( ar3[i] );
    }

    return 0;
}

【问题讨论】:

  • 首先,确保ar3已完全初始化,然后添加一个检查。
  • 不清楚你在问什么。从程序存储器中的数组中删除“行”?从输出中删除一些东西?
  • @Vorsprung 删除输出中的空行,因此它只打印其中包含值的元素
  • @Quest 姐你特地写了 memcpy( ar3 + 5, ar2, sizeof( ar2 ) );而不是 memcpy(ar3 + 3, ar2, sizeof(ar2) );?这就是为什么你在表达式 ar3 + 5 中使用 5 而不是 3?
  • @VladfromMoscow 我是故意这样做的,我想要一种只打印字符串值并跳过空值的方法

标签: c arrays string multidimensional-array


【解决方案1】:

这是一个例子

#include <stdio.h>
#include <string.h>

size_t remove_blank( char ( *s )[10], size_t n )
{
    size_t i = 0;

    while ( i < n && !( s[i][0] == '\0' ) ) ++i;

    for ( size_t j = i + 1; j < n; j++ )
    {
        if ( s[j][0] != '\0' )
        {
            strcpy( s[i], s[j] );
            ++i;
        }
    }

    for( size_t j = i; j < n; j++ ) s[j][0] = '\0';

    return i;
}

int main(void) 
{
    char ar1[3][10]={"a","b","c"};
    char ar2[3][10]={"d","e","f"};
    char ar3[10][10] = { { '\0' } };;

    size_t j = 0;
    for ( size_t i = 0; i < 3; i++, j++ )
    {
        strcpy( ar3[j], ar1[i] );
    }

    j += 2;

    for ( size_t i = 0; i < 3; i++, j++ )
    {
        strcpy( ar3[j], ar2[i] );
    }

    for ( size_t i = 0; i < 10; i++ )
    {
        puts( ar3[i] );
    }

    size_t n = remove_blank( ar3, 10 );

    for ( size_t i = 0; i < n; i++ )
    {
        puts( ar3[i] );
    }

    return 0;
}

输出是

a
b
c


d
e
f


a
b
c
d
e
f

您复制数组的方法也可以这样做。唯一的要求是ar3应该是零初始化的

char ar3[10][10] = { { '\0' } };

【讨论】:

    猜你喜欢
    • 2016-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    • 1970-01-01
    • 2018-05-28
    • 2022-06-15
    • 1970-01-01
    相关资源
    最近更新 更多