Форум программистов, компьютерный форум CyberForum.ru

Найти слова, начинающиеся и заканчивающиеся гласными буквами - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Что означает? http://www.cyberforum.ru/cpp-beginners/thread119328.html
Вот код программы: // // Программа для преобразования // градусов Цельсия в градусы Фаренгейта: // Fahrenheit = NCelsius * (212 - 32)/100 + 32 // #include<iostream> using namespace std; int main(int nNumberofArgs, char* pszArgs)
C++ Перегрузка и шаблон функции 1)Выполнить задание обеспечив перегрузку функций для типов int, float, double. 2)Выполнить задание оформив его в виде шаблона функции. Написать программы, использующие эти шаблоны для типов int, float, double #include <iostream> #include <iomanip> #include <stdlib.h> #include <cmath> using namespace std; int main () http://www.cyberforum.ru/cpp-beginners/thread119323.html
Кольцевой список C++
Написала код для односвязного кольцевого списка. Не могу понять свою ошибку. Помогите исправить))) #include <iostream> using namespace std; struct sсl { char inf;
Как передать второй параметр DialogBox()& C++
DialogBox (hInst, "DIALOGS", NULL, (DLGPROC) Pr); Пишет, мол типы не сходятся const char и LPCWSTR, посоветовали так DialogBox (hInst, (LPCWSTR)"DIALOGS", NULL, (DLGPROC) Pr); компилятор ругаться перестал, но вместо "DIALOGS" туда передаются аие то китайские иероглифы. Я вообще новичок, объясните мне, что я не понимаю
C++ Решение системы уравнений методом Зейделя http://www.cyberforum.ru/cpp-beginners/thread119301.html
Ребята, есть такая проблема, есть код который решает сис-му уравнений методом Зейделя, но при вводе отрицательных значений выдается какой-то странный результат, скажите. что не так? #include <stdio.h> #include <math.h> #define N 3 #define M 300 double A={{4,1,-5},{3,4,2},{1,5,5}}; double B={11,1,-10};
C++ добыть цифру из числа Задано трехзначные число.Определить равен лы квадрат этого числа сумме кубов его цифр. подробнее

Показать сообщение отдельно
NNN777
299 / 157 / 19
Регистрация: 27.02.2010
Сообщений: 317
27.04.2010, 10:10     Найти слова, начинающиеся и заканчивающиеся гласными буквами
Откоментирую свою :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
const int SIZE =80;     
void form (char*, char*); //это прототип функции form (говорит, что функция ничего не возвращает - void, но принимает 2 параметра - 2 указателя на char), его надо обязательно написать до использования самой функции
 
void main()
{
        char buf[SIZE], outbuf[SIZE]={' '};    //2 массива: один входные данные, что введены с клавиатуры (у вас из файла), второй. чтобы было куда поместить найденные слова 
        while(cout<<"Vvedite stroky: ", 
        cin.getline(buf, SIZE))
        {       
                form (buf, outbuf); //вызов функции form (передаем 2 указателя на 2 массива)
 
                cout<<"Rez: ";
                cout<<outbuf; //печать результата
                cout<<endl<<endl;
        }
}
void form (char *a,char *out)   //описание функции form (функция получает 2 параметра: два указателя на 1-е элементы переданных в нее массивов, а именно на buf и outbuf (см main) просто в самой функции они названы a и out)
{       
        char *first=a, *end=a;    //обыявляем два указателя на char и присваиваем и значение а, т. е. первый элемент массива buf
        *out='\0';       // out - это указатель на 1-й элемент outbuf, а outbuf пустой, мы ему присваиваем 0 байт,т.е. конец строки
        int k=0, flag=false, flag2=false;    //создается два флага
        char b[]={"AEIUOYaeiuoy"};    
 
        while (*first!='\0')     //в конце символьной строки записывается всегда 0 байт - это признак конца строки, так вот, пока указатель *first не будет равен 0 байт, т.е пока не конец строки (это еще можно записать, как while(*first) - значит тоже самое)
        {
                flag=false; flag2=false; //флагам устанавливаем ложь (если это не сделать, то как только программа найдет первое подходящее слово, запишет его и задаст флагам истину, если их не обнулить, все остальные слова будет подходить по заданным ниже критериям) обнуляем для каждого слова
 
                while (*first==' '&&*first!='\0')  //цикл, пока ук-ль *first равен пробелу и не равен концу строки (если равен концу строки,и считать нечего))
                        first++;    //сдвигаем адрес указателя на 1позицию, на 1 символ
//теперь *first у нас стоит на следующем сомволе после пробелов - первая буква слова
                end=first; //адресу end присваиваем адрес first, ставим end на ту же букву
 
                while (*end!=' '&&*end) //пока *end не равен пробелу и концу файла
                        end++; //двигаем указатель end
 //теперь end стоит на первом пробеле! после пройденного слова
                for (int i=0; i<12; i++) //проверяем равна ли первая буква элементу массива
                        if (*first==b[i])
                        {
                                flag=true; //если да, флаг - истина
                                break; //заканчиваем цикл - зачем нам сравнивать дальше
                        }
                for (int i=0; i<12; i++) //проверяем равна ли пследняя буква элементу массива *(end-1) - эти последняя буква (указатель на (end-1 позиция), т.к end - указатель на первый пробел после слова
                        if (*(end-1)==b[i])
                        {
                                flag2=true; //все как в предидущем цикле
                                break;
                        }
                if (flag==true&&flag2==true) //если оба флага истинны ( и 1-я и последняя буквы есть в массиве)
                {
                        while (first!=end) //пока адрес первой буквы не равен первого пробела после слова
                                *out++=*first++; //в массив out записывается содержимое массива buf, на который указывает *first (++ сдвигаем оба указателя на 1 позицию)
                        *out++=' '; //как только скопировали слово, ставим после него пробел
                        *out='\0'; //присваиваем конец файла
//во время этих манипуляций указатель на первую букву пройдет до первого после слова пробела
                }
                else first=end;     //если слово не подходит, просто присваиваем указателю на первую букву адрес первого после слова пробела и цикл продолэается...
        }
}
Надеюсь, теперь все понятно ?
 
Текущее время: 00:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru