В школьном задании нас просят убирать все гласные в строке.
Итак:
«Мальчик пнул мяч» приведет к
"Th by kckd th bll"
Всякий раз, когда обнаруживается гласная, все последующие символы так или иначе должны сдвигаться влево, или, по крайней мере, это мой подход. Поскольку я только начал изучать C, вполне возможно, что это нелепый подход.
То, что я пытаюсь сделать, это: Когда я нажимаю первую гласную, я «сдвигаю» следующий символ ([i + 1]) на текущий pos (i). Затем сдвиг должен продолжаться для каждого последующего символа, поэтому int начальное смещение устанавливается на 1, поэтому первый блок if выполняет исключение на каждой последующей итерации.
Первый блок if также проверяет, является ли следующий символ гласным. Без такого теста любой символ, предшествующий гласному, «трансформируется» в соседний гласный, и все гласные, кроме первого, все равно будут присутствовать. Однако это привело к тому, что каждый гласный был заменен предшествующим символом, отсюда и блок if else.
В любом случае, этот уродливый код - это то, что я придумал до сих пор. (Имена, используемые для указателей типа char *, не имеют смысла (я просто не знаю, как их назвать), и наличие двух их наборов, вероятно, является избыточным.
char line[70];
char *blank;
char *hlp;
char *blanktwo;
char *hlptwo;
strcpy(line, temp->data);
int i = 0;
int j;
while (line[i] != '\n') {
if (startshift && !isvowel(line[i+1])) { // need a test for [i + 1] is vowel
blank = &line[i+1]; // blank is set to til point to the value of line[i+1]
hlp = &line[i]; // hlp is set to point to the value of line[i]
*hlp = *blank; // shifting left
} else if (startshift && isvowel(line[i+1])) {
blanktwo = &line[i+1];
hlptwo = &line[i];
*hlptwo = *blanktwo;
//*hlptwo = line[i + 2]; // LAST MOD, doesn't work
}
for (j = 0; j < 10; j++) { // TODO: j < NVOWELS
if (line[i] == vowels[j]) { // TODO: COULD TRY COPY EVERYTHING EXCEPT VOWELS
blanktwo = &line[i+1];
hlptwo = &line[i];
*hlptwo = *blanktwo;
startshift = 1;
}
}
i++;
}
printf("%s", line);
Код не работает.
с text.txt:
The boy kicked the ball
He kicked it hard
. / Require1 remove test.txt создает:
Че мальчик ударил по мячу
e kicked it hard
NB. Я опустил внешний цикл while, используемый для перебора строк в текстовом файле.