Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.80/88: Рейтинг темы: голосов - 88, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 21.09.2015
Сообщений: 32

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

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

Студворк — интернет-сервис помощи студентам
Нужно написать функцию , которая на вход принимает строку и в качестве результата возвращает ее копию так, чтобы в ней не было гласных английских букв и точки с запятой.
Я понимаю что наглость, но просто подскажите сам алгоритм.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.09.2015, 11:51
Ответы с готовыми решениями:

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

Нужна функция, которая принимает в качестве параметра массив символов char [20] и возвращает число пробелов в нем
Нужна функция, которая принимает в качестве параметра массив символов char и возвращает число пробелов в нем. Внутри функции определить...

Метод, который принимает на вход имя и зарплату и возвращает строку
нужно дополнить код в месте "..."

26
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
22.09.2015, 11:52
Цитата Сообщение от vovamakr Посмотреть сообщение
Я понимаю что наглость, но просто подскажите сам алгоритм.
Ага. Создаешь функцию, которая на вход принимает ссылку на строку (std::string?) и возращает ее же.
0
 Аватар для Пытливый Ум
22 / 22 / 16
Регистрация: 04.06.2015
Сообщений: 126
22.09.2015, 12:27
проверяйте
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
0 / 0 / 0
Регистрация: 21.09.2015
Сообщений: 32
22.09.2015, 12:46  [ТС]
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
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
22.09.2015, 13:01
Цитата Сообщение от vovamakr Посмотреть сообщение
Как то так?
Что это за страшилище?
Копия строки - это новая строка. Где она у тебя?
Если работа с char * не обязательна, то для хранения и работы со строками используй std::string.
Цитата Сообщение от vovamakr Посмотреть сообщение
в ней не было гласных английских букв и точки с запятой
Создаешь функцию, которая принимает на вход букву char и возращает true или false в зависимости от того, нужно ли удалять данный символ или нет. Далее пробегаешь по всей строке и копируешь в новую только нужные символы. В STL можно воспользоваться std::remove_if.
0
0 / 0 / 0
Регистрация: 21.09.2015
Сообщений: 32
22.09.2015, 13:23  [ТС]
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
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
22.09.2015, 13:55
Цитата Сообщение от 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
0 / 0 / 0
Регистрация: 21.09.2015
Сообщений: 32
22.09.2015, 14:35  [ТС]
nonedark2008, честно я уже не знаю как делать. Можете пример навести и я по примеру сделаю. Бо я уже запутался(((
0
 Аватар для Пытливый Ум
22 / 22 / 16
Регистрация: 04.06.2015
Сообщений: 126
22.09.2015, 14:48
vovamakr, а моё решение что не работает?
0
0 / 0 / 0
Регистрация: 21.09.2015
Сообщений: 32
22.09.2015, 15:01  [ТС]
Пытливый Ум, понимаете, я ваш код не могу понять, он сложный для меня) Я хочу по проще сделать и по порядку. Сначала просто возвратить копию строки . Потом гласные самому написать через if проверку чтобы их пропускало .
0
 Аватар для Пытливый Ум
22 / 22 / 16
Регистрация: 04.06.2015
Сообщений: 126
22.09.2015, 16:16
vovamakr, подумайте. зачем писать if'ы, если можно создать массив "запретных" символов типо
C++
1
char sDictionary[8] = "eyuioa;"
а потом проверять есть ли один из этих символов в копируемой строке?
0
0 / 0 / 0
Регистрация: 21.09.2015
Сообщений: 32
22.09.2015, 17:10  [ТС]
Пытливый Ум, я понял. а можно через 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
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
22.09.2015, 17:26
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
0 / 0 / 0
Регистрация: 21.09.2015
Сообщений: 32
22.09.2015, 17:34  [ТС]
nmcf, откуда if (strchr(sDistionary, *inStr) == NULL) - strchr ? И что это такое?
0
0 / 0 / 3
Регистрация: 31.08.2015
Сообщений: 49
22.09.2015, 19:21
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
0 / 0 / 0
Регистрация: 21.09.2015
Сообщений: 32
22.09.2015, 20:48  [ТС]
sswt, результат выводит не правильный
0
 Аватар для Пытливый Ум
22 / 22 / 16
Регистрация: 04.06.2015
Сообщений: 126
22.09.2015, 21:15
vovamakr, попробуйте разобраться
структура-то проста do{ ... } while(условие == выполняется);
это как и while() {} с тем лишь отличием, что сначала выполняется тело цикла, а потом идёт проверка на действительность условия

вы можете заменить эту структуру на
C++
1
for(;*p1 != 0x00; p1++)
0
0 / 0 / 3
Регистрация: 31.08.2015
Сообщений: 49
22.09.2015, 21: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
 Аватар для Пытливый Ум
22 / 22 / 16
Регистрация: 04.06.2015
Сообщений: 126
22.09.2015, 22:36
sswt, что это за жесть? для чего вам sDistionary ?
и почему два цикла for?
0
0 / 0 / 3
Регистрация: 31.08.2015
Сообщений: 49
23.09.2015, 18:47
Пытливый Ум, в 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.09.2015, 18:47
Помогаю со студенческими работами здесь

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

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

Написать функцию, которая возвращает в качестве результата решение любого квадратного уравнения
Написать функцию, которая возвращает в качестве результата решение любого квадратного уравнения. Прототип функции: ComlpexPair...

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

Функция, которая в качестве параметра принимает массив
Ребята, кто опытные, обращаюсь к вам. Хотела этот массив реализовать через функцию и вывести на экран двумя способами: через return и через...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru