如何将此循环转换为for循环?

时间:2018-04-21 20:54:16

标签: c for-loop while-loop

我试图将此循环转换为for循环,但我无法让它工作,它在C中。

while(args[argCounter]){
        if(!strcmp(args[argCounter], "|")){
            args[argCounter] = NULL;
            cmdbegin[child] = argCounter + 1;
            child++;
        }
        argCounter++;
}

3 个答案:

答案 0 :(得分:2)

我会将其翻译如下:

for (int argCounter = 0 ; args[argCounter] ; argCounter++){
    if(!strcmp(args[argCounter], "|")){
        args[argCounter] = NULL;
        cmdbegin[child++] = argCounter + 1;
    }
}

我添加了您未展示的argCounter的声明和初始化。转换非常机械化:

  • argCounter++已移至for循环标题的第三个“隔离专区”
  • 我将child++移到了作业中以稍微缩短代码;这是可选的。

答案 1 :(得分:1)

或者

char **tmp = args + argCounter;
for(;*tmp;tmp++)
{
    ++argcounter;
    if (!strcmp(*tmp, "|")) {
    *tmp = NULL;
    cmdbegin[child++] = argCounter;
}

答案 2 :(得分:0)

您的代码中未指定argCounter的初始值。这是转换:

for (; args[argCounter]; argCounter++) {
    if (!strcmp(args[argCounter], "|")) {
        args[argCounter] = NULL;
        cmdbegin[child] = argCounter + 1;
        child++;
    }
}

如果循环从0开始,并且您希望argCounter循环为for,则此处为C99版本:

for (int argCounter = 0; args[argCounter]; argCounter++) {
    if (!strcmp(args[argCounter], "|")) {
        args[argCounter] = NULL;
        cmdbegin[child] = argCounter + 1;
        child++;
    }
}