Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
vovamakr
0 / 0 / 0
Регистрация: 21.09.2015
Сообщений: 32
#1

Функция, которая на вход принимает строку и в качестве результата возвращает ее копию

22.09.2015, 11:51. Просмотров 1906. Ответов 26
Метки нет (Все метки)

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

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2015, 11:51
Ответы с готовыми решениями:

Напишите функцию, которая принимает три числа в качестве параметров и возвращает их сумму.
Напишите функцию, которая принимает три числа в качестве параметров и...

Напишите программу, содержащую функцию, которая принимает два числа в качестве аргументов и возвращает их произведения.
Напишите программу, содержащую функцию, которая принимает два числа в качестве...

Функция которая принимает вектор указателей на числа и возвращает их сумму
Напиши ф-цию, которая принимает вектор указателей на unsigned long, складывает...

Написать функцию, которая принимает строку звуков, а возвращает звук
Всем привет! В общем, я хочу разобраться с алгоритмом в такой задаче: в...

Функция F1, которая не принимает и не возвращает значений, но выводит на экран любое сообщение
На языке С/C++ написать программу в которой имеется функция F1, которая не...

26
nonedark2008
1025 / 765 / 211
Регистрация: 28.07.2012
Сообщений: 2,124
22.09.2015, 11:52 #2
Цитата Сообщение от vovamakr Посмотреть сообщение
Я понимаю что наглость, но просто подскажите сам алгоритм.
Ага. Создаешь функцию, которая на вход принимает ссылку на строку (std::string?) и возращает ее же.
0
Пытливый Ум
20 / 20 / 16
Регистрация: 04.06.2015
Сообщений: 126
22.09.2015, 12:27 #3
проверяйте
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
char sDictionary[] = гласные_и_точка_с_запятой // вводишь строкой. не забудь байт для конца строки
 
void StrFilter(char *sInString, char *sOutString)
{
      char *p1 = sInString;
      char *p2;
      char *p3 = sOutString;
      do{
            *p2 = sDictionary;
            do{
                  if(*p1 = *p2) // если символ встретился среди запретных останавливаемый цикл
                  { break; }
            }while(++*p2 != 0x00);
            if(*p2 == 0x00) // если цикл не был пройден полностью, добавляем символ в строку-выход
            { *p3++ = *p1; }
      }while(++*p1 != 0x00); //работаем до конца входной строки
}
0
vovamakr
0 / 0 / 0
Регистрация: 21.09.2015
Сообщений: 32
22.09.2015, 12:46  [ТС] #4
nonedark2008,
Как то так?
C++
1
2
3
4
5
6
7
8
9
int StrCopy(const char* str)
{   
    int copy= 0;
    for (; *str != '\0'; ++str, ++str)
        {
        copy = *str;
    }
 
    return copy;
0
nonedark2008
1025 / 765 / 211
Регистрация: 28.07.2012
Сообщений: 2,124
22.09.2015, 13:01 #5
Цитата Сообщение от vovamakr Посмотреть сообщение
Как то так?
Что это за страшилище?
Копия строки - это новая строка. Где она у тебя?
Если работа с char * не обязательна, то для хранения и работы со строками используй std::string.
Цитата Сообщение от vovamakr Посмотреть сообщение
в ней не было гласных английских букв и точки с запятой
Создаешь функцию, которая принимает на вход букву char и возращает true или false в зависимости от того, нужно ли удалять данный символ или нет. Далее пробегаешь по всей строке и копируешь в новую только нужные символы. В STL можно воспользоваться std::remove_if.
0
vovamakr
0 / 0 / 0
Регистрация: 21.09.2015
Сообщений: 32
22.09.2015, 13:23  [ТС] #6
nonedark2008,
Я на Си делаю:
C++
1
2
3
4
5
6
7
8
9
10
11
12
unsigned StrCopy( const char& str)
{   
    int* copy = (int*)malloc(sizeof(int));
          if (сopy != nullptr)
    {
        free(copy);
    }
    for (; &str != '\0'; ++str){
        copy = str;
    }
    return copy;
}
0
nonedark2008
1025 / 765 / 211
Регистрация: 28.07.2012
Сообщений: 2,124
22.09.2015, 13:55 #7
Цитата Сообщение от vovamakr Посмотреть сообщение
const char& str
Это ссылка на один символ, а не строка.
Цитата Сообщение от vovamakr Посмотреть сообщение
int* copy = (int*)malloc(sizeof(int));
Цитата Сообщение от vovamakr Посмотреть сообщение
free(copy);
Память выделил и сразу освободил, зачем?
Цитата Сообщение от vovamakr Посмотреть сообщение
&str != '\0'
Несоответствие типов, слева указатель char *, справа - символ char.
Цитата Сообщение от vovamakr Посмотреть сообщение
copy = str;
Опять, слева int *, справа char.
0
vovamakr
0 / 0 / 0
Регистрация: 21.09.2015
Сообщений: 32
22.09.2015, 14:35  [ТС] #8
nonedark2008, честно я уже не знаю как делать. Можете пример навести и я по примеру сделаю. Бо я уже запутался(((
0
Пытливый Ум
20 / 20 / 16
Регистрация: 04.06.2015
Сообщений: 126
22.09.2015, 14:48 #9
vovamakr, а моё решение что не работает?
0
vovamakr
0 / 0 / 0
Регистрация: 21.09.2015
Сообщений: 32
22.09.2015, 15:01  [ТС] #10
Пытливый Ум, понимаете, я ваш код не могу понять, он сложный для меня) Я хочу по проще сделать и по порядку. Сначала просто возвратить копию строки . Потом гласные самому написать через if проверку чтобы их пропускало .
0
Пытливый Ум
20 / 20 / 16
Регистрация: 04.06.2015
Сообщений: 126
22.09.2015, 16:16 #11
vovamakr, подумайте. зачем писать if'ы, если можно создать массив "запретных" символов типо
C++
1
char sDictionary[8] = "eyuioa;"
а потом проверять есть ли один из этих символов в копируемой строке?
0
vovamakr
0 / 0 / 0
Регистрация: 21.09.2015
Сообщений: 32
22.09.2015, 17:10  [ТС] #12
Пытливый Ум, я понял. а можно через for написать а не через do , а то я не шарю что такое do

Добавлено через 45 минут
У меня так и не вышло ничего((((
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
unsigned StrCopy( const char* inStr)
{
    int* outStr = (int*)malloc(sizeof(int));
    char sDistionary[9] = "eyuioa;";
    bool run = true;
    for (; &inStr != '\0'; ++inStr)
    {
        if (*inStr == *sDistionary)
            return false;
        else
            return true;
        *outStr++ = *inStr;
    }
    return *outStr;
}
0
nmcf
6259 / 5571 / 2531
Регистрация: 14.04.2014
Сообщений: 23,461
22.09.2015, 17:26 #13
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
char * StrCopy(const char* inStr)
{
    char * sDistionary = "eyuioa;";
 
    char* outStr = new char[strlen(inStr) + 1];
 
    for (; *inStr != '\0'; ++inStr)
        if (strchr(sDistionary, *inStr) == NULL)
        {
            *outStr = *inStr;
            ++outStr;
        }
 
    *outStr = '\0';
 
    return outStr;
}
0
vovamakr
0 / 0 / 0
Регистрация: 21.09.2015
Сообщений: 32
22.09.2015, 17:34  [ТС] #14
nmcf, откуда if (strchr(sDistionary, *inStr) == NULL) - strchr ? И что это такое?
0
sswt
0 / 0 / 3
Регистрация: 31.08.2015
Сообщений: 49
22.09.2015, 19:21 #15
vovamakr, может это вы имеле введу? За правильность я не отвечаю, так как не сама еще плаваю в этом
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
unsigned StrCopy( const char* inStr)
{
    char * sDistionary = "eyuioa;";
    int* outStr = (int*)malloc(sizeof(int));
    for (; *inStr != '\0'; ++inStr)
    if (*inStr == *sDistionary)
    {
        *outStr = *inStr;
        ++outStr;
    }
 
    return *outStr;
 
}
Добавлено через 2 минуты
nmcf, а как без этих функций встроеных strchr и strlen сделать?

Добавлено через 1 час 7 минут
Както так, но снова я не проверяла :
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
unsigned StrCopy( const char* inStr)
{
    char * sDistionary = "eyuioa;";
    int len = 0;
    int j = 0;
 
    for (int index = 0; *inStr; ++index)
    {
        len += (*inStr == 'a' || *inStr == 'e' || *inStr == 'y' || *inStr == 'u' || *inStr == '0' || *inStr == ';');
            
    }
    char* outStr = (char*)malloc(len) + 1;
 
 
    for (int index = 0; *inStr; index++)
    {
        if ((*inStr == 'a' || *inStr == 'e' || *inStr == 'y' || *inStr == 'u' || *inStr == '0' || *inStr == ';'))
        {
            outStr[j++] = inStr[index];
            
        }
        outStr[j] = 0;
    }
    return *outStr;
 
}
0
vovamakr
0 / 0 / 0
Регистрация: 21.09.2015
Сообщений: 32
22.09.2015, 20:48  [ТС] #16
sswt, результат выводит не правильный
0
Пытливый Ум
20 / 20 / 16
Регистрация: 04.06.2015
Сообщений: 126
22.09.2015, 21:15 #17
vovamakr, попробуйте разобраться
структура-то проста do{ ... } while(условие == выполняется);
это как и while() {} с тем лишь отличием, что сначала выполняется тело цикла, а потом идёт проверка на действительность условия

вы можете заменить эту структуру на
C++
1
for(;*p1 != 0x00; p1++)
0
sswt
0 / 0 / 3
Регистрация: 31.08.2015
Сообщений: 49
22.09.2015, 21:18 #18
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
char* StrCopyDistionary( const char* inStr)
{
    char * sDistionary = "eyuioa;";
    int len = 0;
    int j = 0;
 
    for (int index = 0; inStr[index]; ++index)
    {
        len += !(inStr[index] == 'a' || inStr[index] == 'e' || inStr[index] == 'y' || inStr[index] == 'u' || inStr[index] == '0' || inStr[index] == ';');
            
    }
    char* outStr = (char*)malloc(len) + 1;
 
 
    for (int index = 0; inStr[index]; index++)
    {
        if (!(inStr[index] == 'a' || inStr[index] == 'e' || inStr[index] == 'y' || inStr[index] == 'u' || inStr[index] == '0' || inStr[index] == ';'))
        {
            outStr[j++] = inStr[index];
        }
        outStr[j] = 0;
    }
    return outStr;
 
}
0
Пытливый Ум
20 / 20 / 16
Регистрация: 04.06.2015
Сообщений: 126
22.09.2015, 22:36 #19
sswt, что это за жесть? для чего вам sDistionary ?
и почему два цикла for?
0
sswt
0 / 0 / 3
Регистрация: 31.08.2015
Сообщений: 49
23.09.2015, 18:47 #20
Пытливый Ум, в 1 я размер ищу
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
char* StrCopyDistionary( const char* inStr)
{
    int len = 0;
    int out = 0;
 
    for (int index = 0; inStr[index] !='\0'; ++index)
    {
        if (!(inStr[index] == 'a' ||
            inStr[index] == 'e' || 
            inStr[index] == 'i' || 
            inStr[index] == 'y' || 
            inStr[index] == 'u' || 
            inStr[index] == 'o' || 
            inStr[index] == ';'))
            ++len;
    }
 
    char* outStr = (char*)malloc((len + 1) * sizeof(char));
    for (int index = 0; inStr[index] != '\0'; ++index)
    {
        if (!(inStr[index] == 'a' ||
            inStr[index] == 'e' || 
            inStr[index] == 'i' ||
            inStr[index] == 'y' || 
            inStr[index] == 'u' || 
            inStr[index] == 'o' || 
            inStr[index] == ';'))
            outStr[out++] = inStr[index];
    }
    outStr[out] = '\0';
    
    return outStr;
}
Добавлено через 1 минуту
и так я переделала еще раз и решила сделать следущее, но не знаю как((
написать указатель функции, принимает на вход строку и возвращает на выходе его копию так, чтобы в ней не было громких английских букв и точки с запятой. У меня есть функция которая ищет и выводит на екран строку без гластных и крапки с комой. Но я хочу так как там 2 if однаковых заменит их на указател на еще одну функию в котрой я все это и буду проверять


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
char* StrCopyDistionary( const char* inStr)
{
    int len = 0;
    int out = 0;
 
    for (int index = 0; inStr[index] !='\0'; ++index)
    {
        if (!(inStr[index] == 'a' ||
            inStr[index] == 'e' || 
            inStr[index] == 'i' || 
            inStr[index] == 'y' || 
            inStr[index] == 'u' || 
            inStr[index] == 'o' || 
            inStr[index] == ';'))
            ++len;
    }
 
    char* outStr = (char*)malloc((len + 1) * sizeof(char));
    for (int index = 0; inStr[index] != '\0'; ++index)
    {
        if (!(inStr[index] == 'a' ||
            inStr[index] == 'e' || 
            inStr[index] == 'i' ||
            inStr[index] == 'y' || 
            inStr[index] == 'u' || 
            inStr[index] == 'o' || 
            inStr[index] == ';'))
            outStr[out++] = inStr[index];
    }
    outStr[out] = '\0';
    
    return outStr;
}
 
const char* str4 = "1a2buycigfd3744bhqwdc";
    char* strCopyDistionary = StrCopyDistionary(str4);
    printf("strCopyDistionary:%s\n", strCopyDistionary);
    free(strCopyDistionary);
Добавлено через 29 минут
Посмотрела по примеру в книге. Я правильно сделала?
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
int strDistionary(const char* inStr, int index)
{
    if (!(inStr[index] == 'a' ||
        inStr[index] == 'e' ||
        inStr[index] == 'i' ||
        inStr[index] == 'y' ||
        inStr[index] == 'u' ||
        inStr[index] == 'o' ||
        inStr[index] == ';'));
    return !inStr[index];
}
char* StrCopyDistionary( const char* inStr)
{
    int len = 0;
    int out = 0;
 
    for (int index = 0; inStr[index] !='\0'; ++index)
    {
            int(*pStr)(const char*, int) = strDistionary;
            ++len;
    }
 
    char* outStr = (char*)malloc((len + 1) * sizeof(char));
    for (int index = 0; inStr[index] != '\0'; ++index)
    {
        int(*pStr)(const char*, int) = strDistionary;
        outStr[out++] = inStr[index];
    }
    outStr[out] = '\0';
    
    return outStr;
}
0
23.09.2015, 18:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.09.2015, 18:47

Создайте функцию, которая принимает в качестве аргумента целое число и возвращает число Люка с таким номером
1. Создайте функцию, которая принимает в качестве аргумента целое число и...

Написать функцию atoi(), которая принимает параметр - строку цифр и возвращает соответствующее ей целое
Это оказалось мне не по-силам, поэтому прошу помощи,господа:) Напишите...

Функция, которая возвращает максимальное из двух целых чисел, полученных в качестве аргумента.
Дана матрица размера M х N. Вывести ее элементы в следующем порядке: первая...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru