• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

Посимвольная Обработка Строк

  • Автор темы Джин-ТоНиК
  • Дата начала
Д

Джин-ТоНиК

Дана строка. Сформировать строку, содержащую все символы данной за исключение символов гласных букв.
Вот код:
C++:
#include<iostream>
using namespace std;
const int LSIZE=100;
int main(){
char vowelsArray[] = {'A', 'a', 'E', 'e', 'I', 'i', 'O', 'o', 'U', 'u', '\0'};
char line[LSIZE];
char output[LSIZE];
char *vow_i, *str_i, *out_i;
bool notfound;
cin.getline(line,LSIZE);
str_i=line;
out_i=output;
while(*str_i){
vow_i=vowelsArray;
notfound=true;
while ((*vow_i) && notfound){
if (*str_i==*vow_i){
vow_i=vowelsArray+9;
notfound=false;
}
vow_i++;
}
if (notfound) *out_i++=*str_i;
str_i++;
}
*out_i++=*str_i;
cout<<output; 
cin.getline(line,LSIZE);
return 0;
}

Объясните пожалуйста мне, что делает цикл while:
while ((*vow_i) && notfound){
if (*str_i==*vow_i){
vow_i=vowelsArray+9;
notfound=false;
}
vow_i++;
}
if (notfound) *out_i++=*str_i;
str_i++;
}
*out_i++=*str_i;
cout<<output;
cin.getline(line,LSIZE);
return 0;
 
W

Whatka

автор кода явно не ищет простых путей
проще написать самому,чем разбирать
 
F

franko

Непонятный синтаксис. Непонятно почему нет операции получения адреса (&) при инициализации указателей.
То есть:

C++:
str_i=line;

вместо

C++:
*str_i=&line;

Это допустимо по современным спецификациям?
 
R

rrrFer

str_i=line;
вроде бы нормально, как и
str_i=&line[0];

Код:
*str_i=&line;
тут ты сначала разыменовываешь указатель, т.е. значение ты не указателю уже присваивать пытаешься, это работает? :(
 
F

franko

Код:
*str_i=&line;
тут ты сначала разыменовываешь указатель, т.е. значение ты не указателю уже присваивать пытаешься, это работает? :(

Пардон. Мало-мало попутал.

Хотел написать:
C++:
сhar* str_i=&line

то есть для простоты сразу инициализировать его при объявлении.


вот эта строчка меня смущает: vow_i=vowelsArray+9; В чём её сакральный смысл?
 
R

rrrFer

Хотел написать:

сhar* str_i=&line
написать можно, но я сомневаюсь что будет работать.
сhar* str_i=&line[0]; будет работать точно )

vow_i=vowelsArray+9; В чём её сакральный смысл?
смысла особого нет, ТС таким извращенным способом устанавливает указатель на последний элемент массива (а там хранится '\0' {т.е. ноль}).
Устанавливает видимо чтобы выйти из цикла, ведь в условии цикла проверяется равенство нулю элемента массива:
while ((*vow_i) && notfound){

Добавлено:
сакральный смысл?
вроде бы это строку можно безболезнегго удалить, т.к. он там же notfound изменяет (которое все в том же условии цикла проверяется)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!