Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа со строкой (массивом символов), неправильно работает:( найдите ошибку... 
:(
    Опции темы
Mister U
Дата 6.4.2006, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 6.12.2003
Где: Донецк

Репутация: нет
Всего: нет



Задание:
Разработать функцию, которая выполняет обработку строки:
разбивает строку на две части: до первого вхождения заданного символа и после него.
При реализации функции запрещается пользоваться функциями библиотек языка Си.
Лабораторную организовать в виде элементарного меню:
- ввод исходной строки
- обработка
- вывод исх строки и рез-т.
- выход (с запросом подтверждения)

----------------------------
Вот, попытался выполнить это задание. Не работает либо обработка (т.е. разбиение на две части), либо вывод этих двух частей на экран. Посмотрите плиз... вроде сделал всё правильно, но увы и ах =(

Код

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>

void InputStr(int *flg1, int *flg2, char str[80])
{
  clrscr();
  printf("Введите строку, которую следует обработать:\n");
  gets(str);
  *flg1=1; *flg2=0;
  printf("\nСтрока сохранена. Нажмите любую клавишу...");
  getch();
}

void WorkStr(int flg1, int *flg2, char str[80], char str_part1[80], char str_part2[80])
{
  char sym;
  int sym_index,i;
  clrscr();
  if(flg1==1)
  {
    printf("Введите символ: \n>");scanf("%c",&sym);
    sym_index=-1;
    for(i=0;i<80;i++)
    {
      if(str[i]==sym)
      {
    sym_index=i;
    break;
      }
    }
    if(sym_index!=-1)
    {
      for(i=0;i<sym_index;i++)
      {
    str_part1=str_part1+str[i];
      }
      for(i=sym_index+1;i<80;i++)
      {
    str_part2=str_part2+str[i];
      }
      *flg2=1; // строка обработана
      printf("Строка обработана!\n");
    }
    else
    {
      printf("Символ '%c' в строке не найден!\n",sym);
    }
  }
  else
  {
    printf("Строка не введена, обрабатывать нечего!");
  }
  getch();
}

void PrintWork(int flg1, int flg2, char str[80], char str_part1[80], char str_part2[80])
{
  clrscr();
  if (flg1==1)
  {
    printf("Исходная строка:\n%s\n",str);
  }
  if(flg2==1)
  {
    printf("\nРезультат:\n");
    printf("Part 1: %s\n",str_part1);
    printf("Part 2: %s\n",str_part2);
  }
  if((flg1!=1)&&(flg2!=1))
  {
    printf("Строка не введена, а значит и не обработана!\n");
  }
  getch();
}

void WorkOff(void)
{
  char ch;
  clrscr();
  printf("Завершить работу программы?\n y - да, любая другая клавиша - нет\n");
  ch=getch();
  if((ch=='y') || (ch=='Y') || (ch=='н') || (ch=='Н')) exit(1);
}

void main(void)
{
 int tt=1, flg1,flg2;
 char str[80],str_part1[80],str_part2[80];
 char ch;

 flg1=0; // исх. данные не введены
 flg2=0; // строка не обработана

   while(tt==1)
   {
    clrscr();
    gotoxy(16,12);printf("1");gotoxy(23,12);printf("Ввод исходной строки");
    gotoxy(16,13);printf("2");gotoxy(23,13);printf("Обработка строки");
    gotoxy(16,14);printf("3");gotoxy(23,14);printf("Вывод исходной строки и результат");
    gotoxy(16,15);printf("4");gotoxy(23,15);printf("Выход");
    switch (getch())
    {
      case '1': { InputStr(&flg1,&flg2,str); break; }
      case '2': { WorkStr(flg1,&flg2,str,str_part1,str_part2); break; }
      case '3': { PrintWork(flg1,flg2,str,str_part1,str_part2); break; }
      case '4': { WorkOff(); break; }
    }
   }

}

PM MAIL ICQ   Вверх
_hunter
Дата 6.4.2006, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



может эту лобораторную и сдать за тебя?
пройдись по коду отладчиком.


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Dov
Дата 7.4.2006, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 15
Всего: 88



строки 34 - 41 заменить на:
Код
for(i = 0; i < sym_index; i++)
    str_part1[i] = str[i];
str_part1[sym_index] = '\0';

int j = 0;
for(i = sym_index + 1; i < 80;)
    str_part2[j++] = str[i++];



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0413 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.