Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Ответ
 
Опции темы
Старый 02.11.2008, 14:44   #1
Smotritel89
Пользователь
 
Регистрация: 15.10.2008
Сообщений: 10
По умолчанию Оформить в виде функций

Задание: удалить самое короткое слово из строки.
Нужно разделить функции так: ввод строки, поиск короткого слова, удаление

Код:
#include <iostream.h>
#include <conio.h>
#include <string.h>
#include <stdio.h>

	int main() {
	   char str[256];
	   int curlen = 0, minlen = 256, index = 0, i;
	   
                cout << "Vvedite stroku: ";
	   cin.getline(str, 255, '\n');
	  
                    for (i = 0; ; i++) {
		if (str[i] == ' '|| str[i] == '\0') {
		  if (minlen > curlen){
		      minlen = curlen;
		      index = i;
		 }
		 //если конец строки -> выйти из цикла
		 if (str[i] == '\0') break;
		   curlen = 0;
	      }
	      else curlen++;
	   }
	   //удаление" слова
	   for (i = index - minlen; str[i] != '\0'; i++)
		str[i]=str[i + minlen];
		str[i]='\0';
		printf("Stroka posle obrabotki: ");
		printf("%s",str);
	   return 0;
	}

Вот я сделал, но не совсем работает, помогите пожалуйста исправить ошибки..

#include <iostream.h>
#include <conio.h>
#include <string.h>
#include <stdio.h>

char mainmenu() { 
    char sel;

    clrscr();
    while(1) {
	printf("Vibirite variant:\n");
	printf("\n");	
	printf("1. Vvod stroki\n");
	printf("0. Vixod\n");
        sel = getch();
        if (sel == '1' || sel == '0') return sel;
	clrscr();
    }
}

void readA() {
	     char str[256];
	     cout << "Vvedite stroku ";
	     cin.getline(str, 255, '\n');
}
int findmax() {
	   char str[256];
	
	   int curlen = 0, minlen = 256, index = 0, i;
	   for (i = 0; ; i++) {
		if (str[i] == ' '|| str[i] == '\0') {
		  if (minlen > curlen){
		      minlen = curlen;
		      index = i;
		 }
		
		 if (str[i] == '\0') break;
		   curlen = 0;
	      }
	      else curlen++;
	   }
return 0;
}

void delet() {
                char str[256];

                int minlen = 256, index = 0, i;


		for (i = index - minlen; str[i] != '\0'; i++)
		str[i]=str[i + minlen];
		str[i]='\0';
		printf("Stroka posle obrabotki");
		printf("%s",str);
	  // return 0;

  }


int main() {
    int i;

    switch (mainmenu()) {
	case '1':
	    readA();
	    break;
	default:
	    return 0;
    }
	findmax();
	delet();
return 0;
}

Последний раз редактировалось rpy3uH; 04.11.2008 в 14:21.
Smotritel89 вне форума Ответить с цитированием
Старый 04.11.2008, 12:03   #2
Min
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 239
По умолчанию

у вас функции между собой не взаимодействуют..... у каждой переменная "str" СВОЯ!!!..... лучше объявите её только в main..... и передавайте указатель на неё в параметре функции..... readA(char*str).... и тд.
Надо бы избавиться от привычки ставить многоточие.....
Min вне форума Ответить с цитированием
Старый 04.11.2008, 15:39   #3
spark-roman
Пользователь
 
Регистрация: 25.10.2008
Сообщений: 20
По умолчанию

как-то так:
Код:
#include <iostream>
#include <climits>
#include <cstring>

using namespace std;

char* word;
int minim=CHAR_MAX;

void input_str(char*);
char* min_leng(char*,int &);
char* del_word(char* ,int &,char*);

int main(){
    char str[CHAR_MAX];
    input_str(str);
    cout<<min_leng(str,minim)<<'\n';
    cout<<del_word(word,minim,str);
    cin.get();
    return 0;
}

void input_str(char* str){
     cout<<"Enter string\n";
     cin.getline(str,CHAR_MAX);    
}

char* min_leng(char* str,int& minim){
      char *word_min;
      for (int i=0,n=1;*(str+i)!='\0';i++,n++){
          if (*(str+i)==' ' || *(str+i)=='.'){        
             if (n-1<minim){
                minim=n-1;
                word=str+i-minim;
             }
             n=0;     
          }
      }
      word_min=new char[minim];
      strncpy(word_min,word,minim);
      return word_min;
}

char* del_word(char* word,int& minim,char* str){
      for (int i=0;*(str+i)!='\0';i++){
          if (str+i>=word){ 
             *(str+i)=*(str+i+minim+1);
          }
          *(str+i)=*(str+i);
      }
      return str;
}

Последний раз редактировалось spark-roman; 04.11.2008 в 18:47.
spark-roman вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прога в виде матрицы! prog38 Помощь студентам 25 28.04.2009 03:59
оформить как функцию arturka Помощь студентам 11 20.06.2008 23:41
Русский текст в виде ??? ? ?? ????? www3 PHP 5 15.05.2008 14:30
Оформить задачу процедурами Anita_i Паскаль, Turbo Pascal, PascalABC.NET 2 12.05.2008 12:37
Меню в виде дерева pu4koff JavaScript, Ajax 7 16.10.2007 11:24