Как убрать "продолжить"? - PullRequest
       6

Как убрать "продолжить"?

0 голосов
/ 18 января 2019

У меня есть эта программа на С ++, которая пытается удалить гласные из массива символов.Это работает, но я хочу сделать это без continue;.

#include <iostream>
#include <string.h>
using namespace std;


int main() {


    char s[21],afterElimination[19],vowels[] = "aeiou";
    cin.get(s,20);
    int i, n = strlen(s),VowelPos = -1,h = 0;
    for (i = 0; i < n; i++) {
        if (strchr(vowels,s[i])) {
            if(VowelPos == -1) {
                VowelPos = i;
                continue;
            } 
            VowelPos = i - 1;
        }
        afterElimination[h++] = s[i];

    }
    afterElimination[h] = NULL;
    strcpy(afterElimination + VowelPos, afterElimination + VowelPos + 1);

    cout<<afterElimination;


    return 0;
}

Ответы [ 2 ]

0 голосов
/ 19 января 2019

Довольно просто удалить continue из цикла. Что вам нужно, это два индекса в вашем цикле. Один для позиции в исходном массиве и один для позиции в массиве для копирования. Затем вы помещаете операцию копирования в оператор if, чтобы при отсутствии копии вы ничего не делали, чтобы перейти к следующей итерации. Это сделало бы вашу петлю похожей на

for (int source_index = 0, copy_index = 0; source_index < n; ++source_index) { // increment source_index always
    if (!strchr(vowels,s[i])) {
        // this isn't a vowel so copy and increment copy_index
        afterElimination[copy_index++] = s[i];
    }
    // now this is the continue but we don't need to say it
}
0 голосов
/ 19 января 2019

Это типичный подход к фильтрации писем по заданной строке.

#include <string.h>

char s[20] = "something";
char no_vowels[20] = {0};

int i = 0;
int j = 0;
const char *vowels = "aeiou";
while (s[i]) {
  if (!strchr(vowels, s[i])) {
    no_vowels[j] = s[i];
    j++;
  }
  i++;
}

Вот рабочий пример .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...