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

Тема в разделе "C/C++/C#", создана пользователем Джин-ТоНиК, 3 янв 2013.

  1. Джин-ТоНиК

    Джин-ТоНиК New Member

    Регистрация:
    24 дек 2012
    Сообщения:
    3
    Симпатии:
    0
    Дана строка. Сформировать строку, содержащую все символы данной за исключение символов гласных букв.
    Вот код:
    Код (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;
     
  2. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    автор кода явно не ищет простых путей
    проще написать самому,чем разбирать
     
  3. franko

    franko New Member

    Регистрация:
    8 янв 2013
    Сообщения:
    4
    Симпатии:
    0
    Непонятный синтаксис. Непонятно почему нет операции получения адреса (&) при инициализации указателей.
    То есть:

    Код (C++):
    str_i=line;
    вместо

    Код (C++):
    *str_i=&line;
    Это допустимо по современным спецификациям?
     
  4. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    str_i=line;
    вроде бы нормально, как и
    str_i=&line[0];

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

    franko New Member

    Регистрация:
    8 янв 2013
    Сообщения:
    4
    Симпатии:
    0
    Пардон. Мало-мало попутал.

    Хотел написать:
    Код (C++):
    сhar* str_i=&line
    то есть для простоты сразу инициализировать его при объявлении.


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

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    написать можно, но я сомневаюсь что будет работать.
    сhar* str_i=&line[0]; будет работать точно )

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

    Добавлено:
    вроде бы это строку можно безболезнегго удалить, т.к. он там же notfound изменяет (которое все в том же условии цикла проверяется)
     
Загрузка...
Похожие Темы - Посимвольная Обработка Строк
  1. kolka
    Ответов:
    6
    Просмотров:
    255
  2. anna
    Ответов:
    9
    Просмотров:
    887
  3. FaRReLL
    Ответов:
    0
    Просмотров:
    870
  4. crow1986
    Ответов:
    8
    Просмотров:
    1.878
  5. Dazzel
    Ответов:
    1
    Просмотров:
    950

Поделиться этой страницей