【问题标题】:Subtracting a piece of information from a char array in C从C中的char数组中减去一条信息
【发布时间】:2013-02-22 23:48:49
【问题描述】:

我目前正在编写一段代码,但不知道如何解决这个问题。我解释一下情况:

这段代码的目标是在 C 中创建一个“动态”矩阵。使用“fgets”我得到一个 char 数组,我的代码将第一行解释为一个 char 数组。但是还有更多的行我现在只对第一行感兴趣,所有其他行只包含我需要存储的信息。

我只对第一行感兴趣的原因是因为它包含有关矩阵需要多大的信息才能适合以下所有信息。信息以某种模式出现,它始终采用 x,y 的形式。 x 和 y 彼此不受约束,例如 x 可以比 y 小或大 10 倍。也没有设置该行信息的位置,它可以浮动在屏幕的右侧或左侧。

是否有任何形式(如 java 中的正则表达式)可以用来过滤信息?例如,在第一行中查找“,”,找到后检查“,”的右侧和左侧,一直到第一个空格,并将这两个值存储在变量中。

示例:

[                   14,10            ]

结果将是:

int rowSize = 14;
int columnSize = 10;

【问题讨论】:

  • 好主意,所以我有了一个主意。如果我首先消除空格,我将得到一个数组,该数组由两个数字组成,仅由“,”分隔。那么是否可以在“,”处拆分数组以最终得到 2 个数字?
  • 如果我说我需要使用“strtok”将字符串拆分成更小的字符串,我是否正确?

标签: c regex filter arrays


【解决方案1】:

为什么不搜索第一个有效的十进制字符?

#include <ctype.h>
#include <stdlib.h>
#include <stdio.h>

char *first_digit(const char *s)
{
    while (!isdigit(*s)) s++;
    return s;
}


int main()
{
    const char *line = "[             14,      10        ]";
    int n, k;

    const char *first = first_digit(line);
    const char *end;
    n = strtol(first, &end, 10);

    const char *second = first_digit(end);
    k = strtol(second, NULL, 10);

    printf("n, k = %d, %d\n", n, k);
    return 0;
}

【讨论】:

  • 感谢您的回答!但我想我会坚持罗伯特哈维建议的计划,只是为了学习事实。
猜你喜欢
  • 2020-08-12
  • 2015-03-01
  • 2022-06-11
  • 2020-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-21
  • 1970-01-01
相关资源
最近更新 更多