C/C++

Написал код для языка C, но работает не правильно

Есть задача, написать код который меняет все гласные буквы на следующие после них согласные в латинском алфавите, но при запуске программы гласные буквы на согласные меняются, а согласные которые не должны меняться пропадают, как сделать так чтобы согласные буквы не пропадали?

#define _CRT_SECURE_NO_WARNINGS

#include <iostream>

#include <stdio.h>

void main() {

int string;

int b = 'b';

int f = 'f';

int j = 'j';

int p = 'p';

int v = 'v';

int z = 'z';

string = getchar();


while (string != EOF) {

if (string == 'e') {

putchar(f);

}

if (string == 'i') {

putchar(j);

}

if (string == 'o') {

putchar(p);

}

if (string == 'u') {

putchar(v);

}

if (string == 'y') {

putchar(z);

}

string = getchar();

}

}
Ну, как ты написал - так она и работает. Если гласная, то выводим согласную, а если согласная то ничего не делаем.
 if (string == 'e') { 
putchar(f);
}
if (string == 'i') {
putchar(j);
}
if (string == 'o') {
putchar(p);
}
if (string == 'u') {
putchar(v);
}
if (string == 'y') {
putchar(z);
}

А зачем тебе отдельные переменные для символов? Нельзя сразу putchar('v');

Я бы вообще сделал таблицу замен - массив. Чтобы можно было просто написать
 while (string != EOF) {
putchar(table[string])
string = getchar();
}
А еще я бы выделил этот алгоритм в функцию, принимающую всю строку сразу.
И тогда в main производил бы получение строки, обработки ее через функции и вывод строки результата.

P.s. а зачем тебе и iostream и stdio.h? iostream - это С++ библиотека. А еще переменная у тебя называется string, хотя по сути хранит один символ.
Павел Реутов
Павел Реутов
17 671
Лучший ответ
 #include  
#include
#include
#include
_Bool isvowel(char ch) {
const char* vowels = "aeiouyAEIOUY";
size_t i = 0;
do {
if (vowels[i] == ch) {
return true;
}
} while (vowels[++i]);
return false;
}
void flip(char* str) {
size_t i = 0;
size_t n = strlen(str);
while (++i < n) {
if (isalpha(str[i])) {
if (isvowel(str[i - 1]) && !isvowel(str[i])) {
str[i - 1] = str[i];
}
}
}
}
int main(void) {
char hello[] = "Hello World";
puts(hello);
flip(hello);
puts(hello);
return 0;
}
P.S. Код использует строгое соответствие, при котором каждой согласной букве должен обязательно предшествовать символ гласной буквы.
#include "stdio.h"
#include "string.h"
int main(){
char *g,s[200],c[]="bBfFkKpPfFzZ",d[]="aAeEiIoOuUyY";
gets(s); for(int i=0;s[i];i++)if(g=strchr(d,s[i]))s[i]=c[g-d]; puts(s);}

Кстати, достаточно прочитать #include <iostream>, чтобы увидеть, что твоя программа не на С :) А дальше вообще что-то ужасное... Ну зачем там int?
если «A», «E», «I», «O», «U», «Y» тогда +1 к коду символа.
На вход подать указатель начало строки и пока не ноль проверять символ
Эффективно со switch и примерно так
Твоя прога написана так ужасно, что нет никакого желания ее читать.