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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 27.05.2009, 12:23   #1
Myau Thai
Пользователь
 
Регистрация: 10.03.2009
Сообщений: 15
Восклицание C++ Функции...Немонятная ситуация Помогите плиз

Вообщем Ребята когда я в консоли Удаляю введённые значения (Работа с Функцией CHAR и 3 CASE) то в ответе мне видают в конце (======)
как это исправить помогите плиз (при удалении не идёт остановка и после нуль терминального символа продолжается виставления === на протяжении заданного размер).
Код:
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <ctime>
using namespace std;

void Erase(char*, int&, char);
void Erase (double**, int&, double); 
int main()
{
   int v;
   const int n = 5;
   int size_a = 0;
   int size_s = 0;
   char *big_string = new char[size_s];
   double *my_array = new double[size_a];
   double my_element;
   char my_word;
   
 

   char const* pmenu[n] = {
      "1.Razmer i Inicializacija massiva", 
      "2.Vvodim Slova",
      "3.Ydalenie SLOV",
      "4.Ydalenie 4ISEL", 
      "0. VIXOD"};

   do
   {
      cout << endl;
      for (int i=0; i<n; i++)
         cout << pmenu [i] << endl;
      cout << "\nYour choice: ";
      cin >> v ;
      cin.get();
      if (cin.fail())
      {
         cin.clear();
         while (cin.get()!='\n');
         v = -1;
      }

      switch (v)
      {
      case 1:  // Razmer i Inicializacija massiva
         cout << "\nRazmer massiva: "; 
         cin >> size_a;
         cin.get();
         if (cin.fail())
         {
            cin.clear();
            while (cin.get()!='\n');
            break;
         };

         srand((unsigned int)(time(NULL)));
         delete [] my_array;

         cout << "Polu4ennij massiv:\n";
         my_array = new double[size_a];
         for(int i=0; i<size_a; i++)
         {
            my_array[i] = int(rand()/32767.*15);
            cout << setw(5) << right << my_array[i];
         };
         break;

          case 2: // Vvodim Slova
                  cout << "\nRazmer Stroki: \n";  
                  cin >> size_s;                    while (cin.get()!='\n');
                  cin.get(); 
                  if (cin.fail())                  
                  {
                          cin.clear();                  
                                
                          break;                        
                  };
                  size_s++;                          


                  delete [] big_string;              // удалить массив символов big_string
                  big_string = new char[size_s];     // создать новый массив символов с именем big_string размером size_s
                  cout << "\nVvodim stroku: \n";          // попросим ввести строку с клавиатуры
                  cin.get(big_string, size_s);       // поместить введенную строку в созданный строчкой выше массив
                  while (cin.get()!='\n');           // очистить буфер ввода, если там что-то еще (мусор)
                  break;                             // закончить case

      case 3: // Ydalenie SLOV
         
         cout<<"Vvodim Element: \n";
         cin>>my_word;
         Erase(big_string, size_s,my_word);
         //cout << "You new array:\n";
            for(int i=0; i<size_s; i++)
         {
            cout<<setw(1)<<right<<big_string[i];
         };
                  //while (cin.get()!='\n');
         break;
                 delete [] big_string;

      case 4: // Ydalenie 4ISEL
         
          cout<<"Vvodim element: ";
         cin>>my_element;
         Erase(&my_array, size_a,my_element);
        // cout << "You new array:\n";
         for(int i=0; i<size_a; i++)
         {
            cout << setw(5) << right << my_array[i];
         };
         break;
                 delete [] my_array;

      case 0:
         delete [] big_string;
         delete [] my_array;
         break;

      default :
         cout << "\nTakova Elementa nesu6estvuet v Massive!\n";
      }
   } while (v!=0);
   return 0;
}



void Erase(char* s, int& size, char my_word)
{
for(int i = 0; i<size; i++)
{ // Перебираем символы строки
if(s[i]== my_word)
{ // Если текущий символ равен нужному
// все следующие сдвигаем на один символ влево
for(int j = i+1; j<=size; j++)
{
s[j-1] = s[j];
}
// уменьшаем размер текущей строки на 1
size--;
}
}
}



void Erase(double** arr, int& size, double my_element)
{
int newsize=0,i;
double *newarr;
for(i=0; i<size; i++)
 if((*arr)[i]!=my_element) newsize++;
newarr = new double[newsize];
newsize = 0;
for(i=0;i<size; i++)
 if((*arr)[i]!=my_element) newarr[newsize++] = (*arr)[i];
delete[] (*arr);
(*arr) = newarr;
size = newsize;
}
Myau Thai вне форума
Старый 27.05.2009, 21:53   #2
Myau Thai
Пользователь
 
Регистрация: 10.03.2009
Сообщений: 15
По умолчанию

Чтото с CASE 3 или CASE4 или void Erase(char* s, int& size, char my_word)
Непорядок...кто поможет исправить ошибку?
Myau Thai вне форума
Старый 27.05.2009, 21:57   #3
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

А что не так? Ввожу строку:
Код:
12321423556346
Удаляю элемент '1'.
Конечная строка:
Код:
23242355634
Все удалил как надо.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума
Старый 27.05.2009, 22:00   #4
Myau Thai
Пользователь
 
Регистрация: 10.03.2009
Сообщений: 15
По умолчанию

eta funkcija rabotaet, nerabotaet kogda vvozu bukvi i udaljaju ix (Case 2 i Case 3)
Funkcija s CHAR ne rabotaet
Myau Thai вне форума
Старый 27.05.2009, 22:11   #5
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Myau Thai, не пишите на транслите.
Я и говорю про функцию с char. Все работает.
Скажу по-другому: выводит она то, что нужно.
Только вот памяти новая строка занимает столько же.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума
Старый 27.05.2009, 22:18   #6
Myau Thai
Пользователь
 
Регистрация: 10.03.2009
Сообщений: 15
По умолчанию

Океу..я когда ввожу в Кейсе 2 строку "допустим" 20, и само слово (в 10 элементов)...То при удалении в Кейсе 3 он выдаёт ответ потом нультерминальный символ а дальше непонятные ======символы во всю строку...а как сделать чтобы после ответа строка закончилась и размер строки сократилась до ответа...
Myau Thai вне форума
Старый 27.05.2009, 22:35   #7
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Читайте строку вот так:
Код:
cin.get(big_string,size_s,'\n');
size_s = strlen(big_string);
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума
Старый 27.05.2009, 23:07   #8
Myau Thai
Пользователь
 
Регистрация: 10.03.2009
Сообщений: 15
По умолчанию

Я так пнял надо это сделать так?

Код:
 case 2: // Vvodim Slova
                  cout << "\nRazmer Stroki: \n";  
                  cin >> size_s;                    while (cin.get()!='\n');
				

                  cin.get(); 
                  if (cin.fail())                  
                  {
                          cin.clear();                  
                                
                          break;                        
                  };
                  size_s++;                          


                  delete [] big_string;              
                  big_string = new char[size_s];     
                  cout << "\nVvodim stroku: \n";         
                 
				  cin.get(big_string,size_s,'\n');
                   size_s = strlen(big_string);

                  while (cin.get()!='\n');           
                  break;
Myau Thai вне форума
Старый 27.05.2009, 23:15   #9
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Да. Вместо цикла лучше используйте
Код:
_flushall();
- очистка буферов.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума
Старый 27.05.2009, 23:33   #10
Myau Thai
Пользователь
 
Регистрация: 10.03.2009
Сообщений: 15
По умолчанию

Спасибо...вот ещё вопросик.
1. если я задаю в строке много подряд идущих одинаковых букв (допустим: ааааааа)и в удалении удаляю (а), то удаляются первые 3 буквы а остальные остаются...в чём может быть проблема?

2. я только сейчас заметил что если я в удалении задал 2-... букв на удаление...то программа удаляет только самую первую букву которую я задал.а остальные не трогает (пример : задал строку-asdfgh (решил удалить:af (Ответ выдаёт такой: sdfgh)))

как можно избавится от этой проблемы?
Myau Thai вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с созданием функции плиз Sergmodern Microsoft Office Excel 22 07.11.2008 13:36
Помогите плиз! Moel БД в Delphi 1 11.08.2007 23:29