Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.04.2010, 20:19   #1
Telec
Пользователь
 
Регистрация: 13.01.2010
Сообщений: 36
По умолчанию Как определить на какую букву начинаются слова в строке???

С++

Вот задание: выделить из строки 1 все слова начинающиеся с гластной, а из 2 строки все согластные и образовать 3 строку состоящую из выделеных слов обеих строк, что бы слова разделялись двумя пробелами.

Гластных всего 6 ( a, e, i, o, u, y);

Я тут не могу понять как строку разбить на слова, что бы сравнить первую букву с этими шестью гластными!
Telec вне форума Ответить с цитированием
Старый 18.04.2010, 20:53   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Для определения, является ли символ буквой - функция isalpha(), можете написать свою функцию для определения, является ли символ гласной буквой (их список у вас есть). Все остальные символы-буквы - согласные. Строки на слова можно разбивать, находя первый символ, не являющийся пробелом, а потом - первый после нее пробел (вроде есть еще специальные стандартные функции, не помню точно).
Выделили из строки слово, проверили его первый символ, если подходит - записали в конец строки-результата, добавили в конец два пробела, обрезали входную строку с начала, повторили.
Дальнейшее реализуйте сами.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 18.04.2010, 22:10   #3
Assemblerru
Форумчанин
 
Регистрация: 28.01.2010
Сообщений: 224
По умолчанию

Вот задание: выделить из строки 1 все слова начинающиеся с гластной, а из 2 строки все согластные и образовать 3 строку состоящую из выделеных слов обеих строк, что бы слова разделялись двумя пробелами.

Гластных всего 6 ( a, e, i, o, u, y);

Я тут не могу понять как строку разбить на слова, что бы сравнить первую букву с этими шестью гластными

=================================== ====================
тоесть из строки 1 выделить слова имеющие в начале слова ( a, e, i, o, u, y);
AnsiString SFileData = "расположение файла со строками";
List ->LoadFromFile (SFileData);//загрузили файл
SDataIn = List ->Strings[0]; //загрузили 1 строку
int IiDat;//нахождение разделительного элемента (пробела)
IiDat = SDataIn.Pos(" ");
AnsiString SiDatStr = "";//выделенное слово для проверки
SiDatStr = SiDatStr.Delete(IiDat, 255);//выделили первое слово
if ( SiDatStr [1] == "a")
{
добавляеш в свой список....
return;
}
и так далее ля каждой буквы

извени я написал идею но не саму прогу готовую к применению тут куча недостатков связанных с изменением строки (удалением) нет цикла для проверки остальных слов и т д
всему свое время как зиме и весне
и каждому солнцу свой неба кусок
Assemblerru вне форума Ответить с цитированием
Старый 21.04.2010, 03:10   #4
silent_1991
Пользователь
 
Регистрация: 06.11.2009
Сообщений: 68
По умолчанию

На Си. Перегнать на Си++, думаю, не проблема.

Код:
#include <stdio.h>
#include <string.h>

#define MAX_LEN 1024

int whatisletter(char symbol)
{
    if((symbol >= 'a') && (symbol <= 'z'))
    {
        if ((symbol == 'a') || (symbol == 'e') || (symbol == 'i') || (symbol == 'o') || (symbol == 'u') || (symbol == 'y'))
        {
            return 1;
        }
        else
        {
            return 2;
        }
    }
    
    return -1;
}

int rezult(int len, char str[], char rez[], int *N, int let)
{
    int i, j, k;
    char buffer[20];
    
    for (i = 0, j = 0; i < len; i++)
    {
        while (str[i] == ' ')
        {
            i++;
        }
        
        while ((str[i] >= 'a') && (str[i] <= 'z'))
        {
            buffer[j] = str[i];
            i++;
            j++;
        }
        
        if (whatisletter(buffer[0]) < 0)
        {
            printf("Oshibka vvoda!");
            return -1;
        }
        
        if (whatisletter(buffer[0]) == let)
        {
            for (k = 0; k < j; k++, (*N)++)
            {
                rez[*N] = buffer[k];
            }
            
            rez[*N] = ' ';
            (*N)++;
            rez[*N] = ' ';
            (*N)++;
        }
        
        j = 0;
    }
}

int main()
{
    char str1[MAX_LEN];
    char str2[MAX_LEN];
    char str3[MAX_LEN];
    int len1, len2;
    int i;
    int N = 0;
    
    printf("Vvedite stroku 1: ");
    gets(str1);
    len1 = strlen(str1);
    
    printf("Vvedite stroku 2: ");
    gets(str2);
    len2 = strlen(str2);
    
    rezult(len1, str1, str3, &N, 1);
    rezult(len2, str2, str3, &N, 2);
    
    printf("Stroka 3: ");
    
    for (i = 0; i < N - 2; i++)
    {
        printf("%c", str3[i]);
    }
    
    getch();
    return 0;
}

Последний раз редактировалось silent_1991; 21.04.2010 в 03:24.
silent_1991 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как определить на какую букву начинаются слова в строке??? Telec Помощь студентам 1 18.04.2010 20:28
Как определить в строке присутствие даты vint2 Microsoft Office Excel 4 05.02.2010 15:45
скопировать во второй файл слова которые начинаются и заканчиваются на одну букву Екатерина А. Паскаль, Turbo Pascal, PascalABC.NET 2 23.12.2008 15:08
Pascal//определить длину самого короткого и самого длинного слова в строке ShnurOK Помощь студентам 2 16.12.2007 10:43
Как определить букву диска? Борис2 Паскаль, Turbo Pascal, PascalABC.NET 2 06.12.2007 22:16