在下面的str char数组中,我首先要找到我看到的第一个数学符号,然后我想倒数并删除前三个“_
”之间的任何内容,并删除三个“{ {1}}”。我可以请一些关于如何做到这一点的想法吗?
所以这个:
_
应该变成:
xa_55_y_*_z_/_+_x_+
我的问题是我不知道如何删除:
xa*_z_/_+_x_+
到目前为止,这是代码。
_55_y_
答案 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');
}
对于命名不佳的i
和j
变量感到抱歉,希望它有意义。