删除char数组的字符

时间:2016-04-21 23:20:43

标签: c arrays

在下面的str char数组中,我首先要找到我看到的第一个数学符号,然后我想倒数并删除前三个“_”之间的任何内容,并删除三个“{ {1}}”。我可以请一些关于如何做到这一点的想法吗?

所以这个:

_

应该变成:

 xa_55_y_*_z_/_+_x_+

我的问题是我不知道如何删除:

 xa*_z_/_+_x_+

到目前为止,这是代码。

_55_y_

1 个答案:

答案 0 :(得分:2)

您可以使用strcspn()查找第一个运算符,这样可以简化问题。然后,只需要向后计算下划线,然后只需输出适当的子串,例如:

int main()
{
    char str [] = "xa_55_y_*_z_/_+_x_+";
    size_t firstOp = strcspn(str, "*/+-");
    size_t len = strlen(str);
    size_t i = firstOp;
    int underscores = 0;

    // go backwards looking for the underscores (or the beginning of the
    // string, whichever occurs first)
    while (i > 0)
    {
        if (str[--i] == '_')
            underscores++;
        if (underscores == 3)
            break;
    }

    // output the first part of the string up to the third underscore
    // before the first operator
    for (size_t j = 0; j < i; j++)
        putchar(str[j]);

    // output the rest of the string after and including the operator
    for (size_t j = firstOp; j < len; j++)
        putchar(str[j]);

    // and a linefeed character (optional)
    putchar('\n');
}

对于命名不佳的ij变量感到抱歉,希望它有意义。