有没有办法在条件满足后跳过循环中的条件语句?

时间:2016-05-06 17:58:01

标签: c optimization

假设我们使用值bool初始化了0变量。此变量将在循环中使用,并在满足某个条件后变为1。 一旦它获得值1,它就变得多余了,所以有没有办法在循环中跳过它进行优化?

我的代码:

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

int main(void)
{
    bool var = 0;
    char str[] = "          Hello babz what's up with you?!";
    size_t n, len = strlen(str);
    for (n = 0; n < len; n++) {
        if (str[n] != ' ') {
            var = 1;
        }
        if (var) {
            printf("%c", str[n]);
        }
    }
    putchar('\n');
    return 0;
}

3 个答案:

答案 0 :(得分:5)

一旦检测到条件就退出循环并转到第二个循环

bool var = 0;
char str[] = "          Hello babz what's up with you?!";
size_t n, len = strlen(str);
for (n = 0; n < len; n++) {
    if (str[n] != ' ') {
        var = 1;
        break;
    }
}

  for (; n < len; n++) {
      printf("%c", str[n]);
  }
putchar('\n');
return 0;

当然你可以得到更多惯用的

char *p = str;
while(*p && *p==' ') p++;
puts(p);

答案 1 :(得分:1)

仅在str[n] != ' '为真时打印代码。 <{1}}不需要。

len

或者使用@Jean Jung#include <stdio.h> #include <string.h> int main(void) { char str[] = " Hello babz what's up with you?!"; size_t n; for (n = 0; str[n]; n++) { if (str[n] != ' ') { fputs(&str[n], stdout); break; } } putchar('\n'); return 0; } 中的指针,它们将附加puts()

'\n'

答案 2 :(得分:0)

您也可以使用指针:

char str[] = "          Hello babz what's up with you?!";
char *pstr = str;
while (*pstr == ' ') pstr++;
while (*pstr != '\0') 
{
    printf("%c", *pstr);
    pstr++;
}
putchar('\n');