Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
0 / 0 / 1
Регистрация: 05.12.2010
Сообщений: 26
1

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

09.01.2011, 15:43. Показов 2744. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
доброго времени суток. У меня такая задача:

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


Расскажите пожалуйста с чего мне начать и как это сделать. Обьясните пожалуйста, просто не знаю как начинать.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.01.2011, 15:43
Ответы с готовыми решениями:

Написать функцию которая заменяет все буквы в строке на '*',а цифры оставляет как есть.
Написать функцию которая заменяет все буквы в строке на '*',а цифры оставляет как есть.

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

Написать и протестировать функцию, которая определяет, совпадают ли в заданной строке первая и последняя буквы
Написать и протестировать функцию, которая определяет, совпадают ли в заданной строке первая и...

В строке, на первый символ которой указывает указатель s, заменить все буквы ‘a’ на ‘b’ (написать цикл)
Можно с пояснениями.

16
191 / 175 / 12
Регистрация: 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;
}
1
0 / 0 / 1
Регистрация: 05.12.2010
Сообщений: 26
09.01.2011, 18:01  [ТС] 3
Спасибо огромное за код. а почему программа работает неадекватно если там нужно удалить больше одного символа?
0
191 / 175 / 12
Регистрация: 04.09.2010
Сообщений: 656
09.01.2011, 18:09 4
Спасибо огромное за код. а почему программа работает неадекватно если там нужно удалить больше одного символа?
потомучто она для этого непредназначена. она фильтрует строку, проверяя только наличие одного символа со словом надо немного подругому делать, вы же сами сказали "удалить буквы".
0
0 / 0 / 1
Регистрация: 05.12.2010
Сообщений: 26
09.01.2011, 18:15  [ТС] 5
ну так там написано "Написать функцию удаления в строке все буквы ―b‖, непосредственно за которыми идет цифра" а если в строке 2 буквы b а если в строке больше 1 буквы, то программа перестаёт работать. это можно как-то поправить?
0
191 / 175 / 12
Регистрация: 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 буквы, то программа перестаёт работать. это можно как-то поправить?
если в строке две буквы б, то программа и удаляла две буквы б. программа перестает работать, только если когда вас просят ввести букву(!!!) вы вводите целое слово. и то она не перестает работать а просто считывает букву, а все следуюемое за буквой считается как строка, которую следует фильтровать. программа делает свою задачу но небольше. просто следуйте инструкциям, или вам обязательно необходимы и всевозможные проверки на соответствие типов и введенных данных?
0
0 / 0 / 1
Регистрация: 05.12.2010
Сообщений: 26
09.01.2011, 20:43  [ТС] 7
мне больше того что в задании не нужно. главное чтоб не выгнали а ваш второй код к сожалению не работает выбивает ошибки.

ошибки

error C2057: требуется константное выражение
error C2466: невозможно выделить память для массива постоянного нулевого размера
error C2133: tmp: неизвестный размер
0
191 / 175 / 12
Регистрация: 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;
}
0
0 / 0 / 1
Регистрация: 05.12.2010
Сообщений: 26
09.01.2011, 21:52  [ТС] 9
извеняюсь за свою настырность, но этот запускается, но при работе когда выбираешь удаляемую букву выбивается ошибка в самой программе.
0
191 / 175 / 12
Регистрация: 04.09.2010
Сообщений: 656
09.01.2011, 22:00 10
Цитата Сообщение от snoop11 Посмотреть сообщение
извеняюсь за свою настырность, но этот запускается, но при работе когда выбираешь удаляемую букву выбивается ошибка в самой программе.
хм, а что за ошибка я должен сам догадаться ? у меня отлично компилируется и работает
что у вас за компилятор?)
0
0 / 0 / 1
Регистрация: 05.12.2010
Сообщений: 26
09.01.2011, 22:10  [ТС] 11
у меня тоже компилируется, но при работе самой программы вот что выдаёт:
0
191 / 175 / 12
Регистрация: 04.09.2010
Сообщений: 656
09.01.2011, 22:17 12
я вижу окно ошибки, но текст на нем не читаем, вы б покрупнее сделали картинку.
0
0 / 0 / 1
Регистрация: 05.12.2010
Сообщений: 26
10.01.2011, 19:32  [ТС] 13
0
191 / 175 / 12
Регистрация: 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;
}
0
0 / 0 / 1
Регистрация: 05.12.2010
Сообщений: 26
10.01.2011, 19:58  [ТС] 15
теперь вот так
0
191 / 175 / 12
Регистрация: 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;
}
1
0 / 0 / 1
Регистрация: 05.12.2010
Сообщений: 26
10.01.2011, 21:43  [ТС] 17
спасибо огромное. теперь всё отлично работает.
0
10.01.2011, 21:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.01.2011, 21:43
Помогаю со студенческими работами здесь

Написать программу, которая удаляет в строке все буквы b в тексте, написанном латинскими буквами
Помогите пожалуйста написать программу. Нужно написать программу, которая удаляет в строке все...

Написать функцию, которая удаляет из строки s1 все символы, встречающиеся в строке s2
Народ, очень требуется помощь : :wall: № 1. Написать и протестировать функцию DELETE(s1, s2),...

В строке заменить все буквы «О» на «Ъ», а буквы «Е» – на случайные символы
Дана символьная строка. Заменить в ней все буквы «О» на «Ъ», а буквы «Е» – на случайные символы....

Написать функцию удаления элемента из списка
Надо написать функцию Void del (int value) , которая удаляет элемент в списке и Elem *searth (int...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru