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

Написать функцию удаления в строке все буквы - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.56
snoop11
0 / 0 / 0
Регистрация: 05.12.2010
Сообщений: 26
09.01.2011, 15:43     Написать функцию удаления в строке все буквы #1
доброго времени суток. У меня такая задача:

Выполнить задание двумя способами используя индексы и используя указатели при работе со
строками не используя стандартные операции и функции для строк символов.
Вариант задания реализовать в виде функции. Если функция возвращает строку или ее
фрагмент, то это необходимо сделать через указатель. Строки динамические, размер вводится с
клавиатуры. Строки вводить с клавиатуры.
Составьте блок-схему алгоритма
Написать функцию удаления в строке все буквы ―b‖, непосредственно за которыми идет цифра.


Расскажите пожалуйста с чего мне начать и как это сделать. Обьясните пожалуйста, просто не знаю как начинать.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.01.2011, 15:43     Написать функцию удаления в строке все буквы
Посмотрите здесь:

В строке заменить все буквы «О» на «Ъ», а буквы «Е» – на случайные символы C++
C++ Написать функцию удаления из текста заданного символа
C++ Написать функцию для удаления строки из двумерного массива
C++ Написать функцию удаления из заданного массива отрицательных элементов
Написать функцию которая заменяет все буквы в строке на '*',а цифры оставляет как есть. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vx5
 Аватар для vx5
187 / 171 / 4
Регистрация: 04.09.2010
Сообщений: 656
09.01.2011, 17:03     Написать функцию удаления в строке все буквы #2
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
#include <iostream>
#define N 256
char* filter(char* str, int n , char ch)
{
  char* out = new char[n];
  int k=0;
  for(int i=0;i<n;i++)
    {
      if(str[i]!=ch) 
    {
      out[k]=str[i];
      k++;
    }
      str++;
    }
  out[k+1]='\0';
  return out;
}
 
int main()
{
  char str[N];
  std::cout << "Введите строку:\n";
  std::cin.getline(str,N);
  char ch;
  std::cout << "Введите удаляемый символ который:\n";
  std::cin >> ch;
  char* str_out = filter(str,N,ch);
  std::cout << str_out << std::endl;
  delete[] str_out;
  return 0;
}
snoop11
0 / 0 / 0
Регистрация: 05.12.2010
Сообщений: 26
09.01.2011, 18:01  [ТС]     Написать функцию удаления в строке все буквы #3
Спасибо огромное за код. а почему программа работает неадекватно если там нужно удалить больше одного символа?
vx5
 Аватар для vx5
187 / 171 / 4
Регистрация: 04.09.2010
Сообщений: 656
09.01.2011, 18:09     Написать функцию удаления в строке все буквы #4
Спасибо огромное за код. а почему программа работает неадекватно если там нужно удалить больше одного символа?
потомучто она для этого непредназначена. она фильтрует строку, проверяя только наличие одного символа со словом надо немного подругому делать, вы же сами сказали "удалить буквы".
snoop11
0 / 0 / 0
Регистрация: 05.12.2010
Сообщений: 26
09.01.2011, 18:15  [ТС]     Написать функцию удаления в строке все буквы #5
ну так там написано "Написать функцию удаления в строке все буквы ―b‖, непосредственно за которыми идет цифра" а если в строке 2 буквы b а если в строке больше 1 буквы, то программа перестаёт работать. это можно как-то поправить?
vx5
 Аватар для vx5
187 / 171 / 4
Регистрация: 04.09.2010
Сообщений: 656
09.01.2011, 18:43     Написать функцию удаления в строке все буквы #6
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
#include <iostream>
#define N 256
 
bool is_digit(char ch)
{
  if(ch>='0' && ch<='9') return true;
  return false;
}
 
void filter(char* str, int n , char ch)
{
  char tmp[n];
  int k=0;
  for(int i=0;i<n;i++)
    {
      if(str[i]!=ch || i==n-1 || !is_digit(str[i+1])) 
    {
      tmp[k]=str[i];
      k++;
    }
    }
  tmp[k+1]='\0';
  for(int i=0;i<k;i++) str[i]=tmp[i];
}
 
int main()
{
  char* str = new char[N];
  std::cout << "Введите строку:\n";
  std::cin.getline(str,N-1);
  std::cout << "Введите удаляемые символ который:\n"; //пробел игнорируется, предпологается, что его можно использовать как разделитель.
  char ch;
  while(std::cin.get(ch) && ch!='\n') if(ch!=' ' && ch!='\t') filter(str,N,ch);
  std::cout << str << std::endl;
  delete[] str;
  return 0;
}
Добавлено через 5 минут
ну так там написано "Написать функцию удаления в строке все буквы ―b‖, непосредственно за которыми идет цифра" а если в строке 2 буквы b а если в строке больше 1 буквы, то программа перестаёт работать. это можно как-то поправить?
если в строке две буквы б, то программа и удаляла две буквы б. программа перестает работать, только если когда вас просят ввести букву(!!!) вы вводите целое слово. и то она не перестает работать а просто считывает букву, а все следуюемое за буквой считается как строка, которую следует фильтровать. программа делает свою задачу но небольше. просто следуйте инструкциям, или вам обязательно необходимы и всевозможные проверки на соответствие типов и введенных данных?
snoop11
0 / 0 / 0
Регистрация: 05.12.2010
Сообщений: 26
09.01.2011, 20:43  [ТС]     Написать функцию удаления в строке все буквы #7
мне больше того что в задании не нужно. главное чтоб не выгнали а ваш второй код к сожалению не работает выбивает ошибки.

ошибки

error C2057: требуется константное выражение
error C2466: невозможно выделить память для массива постоянного нулевого размера
error C2133: tmp: неизвестный размер
vx5
 Аватар для vx5
187 / 171 / 4
Регистрация: 04.09.2010
Сообщений: 656
09.01.2011, 20:47     Написать функцию удаления в строке все буквы #8
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
#include <iostream>
#define N 256
 
bool is_digit(char ch)
{
  if(ch>='0' && ch<='9') return true;
  return false;
}
 
void filter(char* str, int n , char ch)
{
  char* tmp = new char[n];
  int k=0;
  for(int i=0;i<n;i++)
    {
      if(str[i]!=ch || i==n-1 || !is_digit(str[i+1])) 
        {
          tmp[k]=str[i];
          k++;
        }
    }
  tmp[k+1]='\0';
  for(int i=0;i<k;i++) str[i]=tmp[i];
  delete[] tmp;
}
 
int main()
{
  char* str = new char[N];
  std::cout << "Введите строку:\n";
  std::cin.getline(str,N-1);
  std::cout << "Введите удаляемые символ который:\n"; //пробел игнорируется, предпологается, что его можно использовать как разделитель.
  char ch;
  while(std::cin.get(ch) && ch!='\n') if(ch!=' ' && ch!='\t') filter(str,N,ch);
  std::cout << str << std::endl;
  delete[] str;
  return 0;
}
snoop11
0 / 0 / 0
Регистрация: 05.12.2010
Сообщений: 26
09.01.2011, 21:52  [ТС]     Написать функцию удаления в строке все буквы #9
извеняюсь за свою настырность, но этот запускается, но при работе когда выбираешь удаляемую букву выбивается ошибка в самой программе.
vx5
 Аватар для vx5
187 / 171 / 4
Регистрация: 04.09.2010
Сообщений: 656
09.01.2011, 22:00     Написать функцию удаления в строке все буквы #10
Цитата Сообщение от snoop11 Посмотреть сообщение
извеняюсь за свою настырность, но этот запускается, но при работе когда выбираешь удаляемую букву выбивается ошибка в самой программе.
хм, а что за ошибка я должен сам догадаться ? у меня отлично компилируется и работает
что у вас за компилятор?)
snoop11
0 / 0 / 0
Регистрация: 05.12.2010
Сообщений: 26
09.01.2011, 22:10  [ТС]     Написать функцию удаления в строке все буквы #11
у меня тоже компилируется, но при работе самой программы вот что выдаёт: [IMG]http://s016.***********/i335/1101/30/504782d40ffct.jpg[/IMG]
vx5
 Аватар для vx5
187 / 171 / 4
Регистрация: 04.09.2010
Сообщений: 656
09.01.2011, 22:17     Написать функцию удаления в строке все буквы #12
я вижу окно ошибки, но текст на нем не читаем, вы б покрупнее сделали картинку.
snoop11
0 / 0 / 0
Регистрация: 05.12.2010
Сообщений: 26
10.01.2011, 19:32  [ТС]     Написать функцию удаления в строке все буквы #13
http://i033.***********/1101/50/260ed0f28494.jpg
vx5
 Аватар для vx5
187 / 171 / 4
Регистрация: 04.09.2010
Сообщений: 656
10.01.2011, 19:46     Написать функцию удаления в строке все буквы #14
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
#include <iostream>
#define N 256
 
bool is_digit(char ch)
{
  if(ch>='0' && ch<='9') return true;
  return false;
}
 
void filter(char* str, int n , char ch)
{
  char* tmp = new char[n];
  int k=0;
  for(int i=0;i<n;i++)
    {
      if(str[i]!=ch || i==n-1 || !is_digit(str[i+1])) 
        {
          tmp[k]=str[i];
          k++;
        }
    }
  tmp[k+1]='\0';
  for(int i=0;i<k;i++) str[i]=tmp[i];
  delete[] tmp;
}
 
int main()
{
  char* str = new char[N];
  std::cout << "Введите строку:\n";
  std::cin.getline(str,N-1);
  std::cout << "Введите удаляемые символ который:\n"; //пробел игнорируется, предпологается, что его можно использовать как разделитель.
  char ch;
  while(std::cin.get(ch) && ch!='\n') if(ch!=' ' && ch!='\t') filter(str,N-1,ch);
  std::cout << str << std::endl;
  delete[] str;
  return 0;
}
snoop11
0 / 0 / 0
Регистрация: 05.12.2010
Сообщений: 26
10.01.2011, 19:58  [ТС]     Написать функцию удаления в строке все буквы #15
теперь вот так http://s002.***********/i197/1101/68/84e5516169f7.jpg
vx5
 Аватар для vx5
187 / 171 / 4
Регистрация: 04.09.2010
Сообщений: 656
10.01.2011, 21:23     Написать функцию удаления в строке все буквы #16
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
#include <iostream>
#define N 256
 
bool is_digit(char ch)
{
  if(ch>='0' && ch<='9') return true;
  return false;
}
 
void filter(char* str, int n , char ch)
{
  char *tmp_str=str;
  char *tmp = new char[n+1];
  int k=0;
  while(*(tmp_str)!='\0')
  {
   if(*tmp_str!=ch || *(tmp_str+1)=='\0' || !is_digit(*(tmp_str+1)))
    {
          tmp[k]=*tmp_str;
          k++;
    }
    tmp_str++;
  }
  tmp[k]='\0';
  for(int i=0;i<=k;i++) str[i]=tmp[i];
  delete[] tmp;
}
 
int main()
{
  char* str = new char[N+1];
  std::cout << "Введите строку:\n";
  std::cin.getline(str,N);
  std::cout << "Введите удаляемые символ который:\n"; //пробел игнорируется, предпологается, что его можно использовать как разделитель.
  char ch;
  while(std::cin.get(ch) && ch!='\n') if(ch!=' ' && ch!='\t') filter(str,N,ch);
  std::cout << str << std::endl;
  delete[] str;
  return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.01.2011, 21:43     Написать функцию удаления в строке все буквы
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
snoop11
0 / 0 / 0
Регистрация: 05.12.2010
Сообщений: 26
10.01.2011, 21:43  [ТС]     Написать функцию удаления в строке все буквы #17
спасибо огромное. теперь всё отлично работает.
Yandex
Объявления
10.01.2011, 21:43     Написать функцию удаления в строке все буквы
Ответ Создать тему
Опции темы

Текущее время: 13:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru