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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.04.2009, 22:56   #1
hen
Пользователь
 
Регистрация: 31.03.2009
Сообщений: 96
По умолчанию помогите переделать программку ...

Пожалуйста помогите переделать программку...
Само задание звучит так: 'Отпечатать второе и третье слова произвольного текста'...
Я написал программку с использованием 'while', но препод хочет чтоб всё было через 'if' ...
Что-то никак не получается переделать на 'if'...
вот мой код:

Код:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <iostream.h>
void main()
{
 char s[100], d[100];
 int i,bw,ew,len,h,a;
 i=0;
 clrscr();
 gets(s);
 h=0;
 len=strlen(s);
 cout << endl << "Vtoroe i tret'e slovo: "<< endl;
 while (i<len)
 {
   while ((s[i]==' ')&&(i<len))i++;
   bw=i;
   while ((s[i]!=' ')&&(i<len))i++;
   ew=i;
   strncpy(d,&s[bw],ew-bw+1);
   d[ew-bw+1]=0;
   h++;
   if ((h>1)&&(h<4)) cout << d<< endl;
 }
cin.get();
}
Помогите пожалуйста, или наведите на мысль... пробовал сделать, но почему то программка выводит только первые буквы слов...
hen вне форума Ответить с цитированием
Старый 04.04.2009, 08:17   #2
Volchara
Пользователь
 
Аватар для Volchara
 
Регистрация: 25.03.2009
Сообщений: 55
По умолчанию

Вообщем у меня с ifами не получилось. Но зато все работает

Код:
#include <iostream>
#include <windows.h>

#define SIZE 50
 
using namespace std;

//========================================================

void print2And3Slovo (char str []);

//========================================================

int main ()
{
    char str [SIZE] = "Vvedite syda nuznie slova";

    print2And3Slovo (str);
    
    system ("pause");
}

//========================================================

void print2And3Slovo (char str [])
{
     int i;
     
     for (i = 1; str [i - 1] != ' '; i++);
     
     i++;
     
     for (; str [i - 1] != ' '; i++)
     {
         cout << str [i - 1];
     }
     
     i++;
     
     cout << " ";
      
     for (; str [i - 1] != ' '; i++)
     {
         cout << str [i - 1];
     }
     
     cout << "\n";
}
Hа C я могy пpосто делать ошибки, на C++ я могy их наследовать!
Volchara вне форума Ответить с цитированием
Старый 04.04.2009, 17:29   #3
hen
Пользователь
 
Регистрация: 31.03.2009
Сообщений: 96
По умолчанию

спасибо конечно но мне нужно обязательно при помощи оператора 'if' и без использования функций как в твоём варианте...
но на всякий случай если можешь объясни некоторые места в твоем коде

Код:
#include <iostream>
#include <windows.h>  \\Что вот это за модуль??

#define SIZE 50           \\ ???  
 
using namespace std;

//========================================================

void print2And3Slovo (char str []);

//========================================================

int main ()
{
    char str [SIZE] = "Vvedite syda nuznie slova";

    print2And3Slovo (str);
    
    system ("pause"); \\???
}

//========================================================

void print2And3Slovo (char str [])
{
     int i;
     
     for (i = 1; str [i - 1] != ' '; i++);
     
     i++;
     
     for (; str [i - 1] != ' '; i++)
     {
         cout << str [i - 1];
     }
     
     i++;
     
     cout << " ";
      
     for (; str [i - 1] != ' '; i++)
     {
         cout << str [i - 1];
     }
     
     cout << "\n";
}
hen вне форума Ответить с цитированием
Старый 04.04.2009, 18:15   #4
Volchara
Пользователь
 
Аватар для Volchara
 
Регистрация: 25.03.2009
Сообщений: 55
По умолчанию

<windows.h> - это стандартная библиотека (я ее использовал для system ("pause"))
#define SIZE 50 - так я объявляю длину массива (если массив у вас используется часто, то это самый удобный вариант)
system ("pause") - это задержка, при которой пишется "Для продолжения нажмите любую клавишу" (в данном случае я ее поставил, чтобы когда программа все выполнит она не закрывалась), эта функция схожа по значению с getch ()

если же вам не нравятся функции - засуньте все в main
Hа C я могy пpосто делать ошибки, на C++ я могy их наследовать!
Volchara вне форума Ответить с цитированием
Старый 06.04.2009, 18:26   #5
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Volchara
Вы в какой среде пишете? Если в VC++, то для того чтобы использовать system("pause"); необязательно подключать windows.h.
MaTBeu вне форума Ответить с цитированием
Старый 06.04.2009, 19:53   #6
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Цитата:
Сообщение от Volchara Посмотреть сообщение
system ("pause") - это задержка, при которой пишется "Для продолжения нажмите любую клавишу" (в данном случае я ее поставил, чтобы когда программа все выполнит она не закрывалась), эта функция схожа по значению с getch ()
Это две совершенно разные функции. И ничего общего у них нет
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 06.04.2009, 23:27   #7
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Blade
Да, но в таких программах их используют в одних и тех же целях.
MaTBeu вне форума Ответить с цитированием
Старый 06.04.2009, 23:44   #8
hen
Пользователь
 
Регистрация: 31.03.2009
Сообщений: 96
По умолчанию

пробовал сделать сам получилось вот что:

Код:
#include <string.h>
#include <stdio.h>
#include <conio.h>
void main()
{
int dlin,i,bw,ew, h;
i=0;
char s[50],d[50];
clrscr();
gets(s);
dlin=strlen(s);
s[dlin]=' ';
s[dlin+1]='\0';
dlin+=1;
h=0;
i=0;
bw=0;
while(i<dlin)
{
  if (s[i]==' ') {
	ew=i-1;
	if (s[i]==' ') {
	  strncpy(d,&s[bw],ew-bw);
	  d[ew-bw+1]='\0';
	   if ((h>1)&&(h<4)) printf("%s\n",d);
	  h++;
	  }
	bw=i+1;
  };
 i++;
 }
getch();
}
помогите исправить нужно было приблизительно в таком виде сделать...
на данный момент проблема в следующем: программа выводит не 2 и 3 слова как надо, а 3 и 4, и еще выводится не всё слово а только 4 символа любого слова...
пожалуйста помогите разобраться с этими двумя проблемками...
hen вне форума Ответить с цитированием
Старый 07.04.2009, 00:55   #9
DeFace
Пользователь
 
Аватар для DeFace
 
Регистрация: 27.09.2008
Сообщений: 60
По умолчанию

попробуй так
Код:
 if ((h>0)&&(h<3)) printf("%s\n",d);
DeFace вне форума Ответить с цитированием
Старый 07.04.2009, 01:31   #10
hen
Пользователь
 
Регистрация: 31.03.2009
Сообщений: 96
По умолчанию

DeFace, спс за помощь, минус одна проблема...
последняя проблемка заключается в том что при выводе результата в первом слове съедается последняя буква...
непонимаю одно вроде есть строчка чтобы в конце 0 ставился...
оюъясните пожадкйста что не так...
hen вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите написать программку nilbug Помощь студентам 3 17.03.2009 06:07
помогите переделать программку автокликер.. sanek_sa Общие вопросы по Java, Java SE, Kotlin 5 29.11.2008 02:38
Помогите написать программку olegavi Общие вопросы C/C++ 1 06.05.2008 16:11
помогите добить программку HAMMAN Помощь студентам 1 06.06.2007 23:52