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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.11.2015, 15:35   #1
AgitoLeviafan
Пользователь
 
Регистрация: 21.11.2015
Сообщений: 20
По умолчанию Строки ,перенос слов.

Ребят,помогите пожалуйста,задача заключается в том чтобы определить кол-во предложений и если из больше 1-го,копировать второе предложение в отдельную строку ,а затем поменять в уже копированной строке первое и последнее слово местами в этом предложении. Собственно трудности заключаются в том чтобы копировать определенный промежуток и поменять слова местами.
Извините что много ошибок, лишнего и к тому же всё в кучу.

Собственно наработки:

Код:
#include <iostream.h>
#include <string.h>
 
int main()
{

    int i,k = 0,t,b,h,s=b-1;
    char s1[100] = "Hello World.Good people?Net!I go to smoking!", s2[100];

    for (i = 0; s1[i]; i++)
    {
        if (s1[i] == '.' || s1[i] == '!' || s1[i] == '?')
            k++;
            }    
                      
    for(i=1;i<100;i++){
    if(s1[i]=='.')t=i;}
   
    
    for(i=1;i<100;i++){
    if(s1[i]=='?')b=i;}
    
    
    //for(i=1;i<100;i++)
   // if(k>1) strncpy(s3,s1,b);
   
 for(i=t-1;i<b;i++)
 if(s>t,s<b)

 
  cout << "Kopirovannaya stroka2 =" << strncpy(s2,s1,s)<<endl; 
    
    

   // for(i=1;i<100;i++)
    //if(i=t,t>b,i++)
    
    
    //if(i=t,i<100,i>h

   
   // if(s1[i]>t,s1[i]<b)
   // h++;
 //;
 
    
    cout << "s1=" << s1<< endl;
    //cout << "Kopirovannaya stroka = " << strncpy(s2,s1,b) <<endl;
    std::cout << "Kol-vo predl " << k << std::endl;
    system("pause");
    return 0;
}

Последний раз редактировалось Stilet; 21.11.2015 в 17:10.
AgitoLeviafan вне форума Ответить с цитированием
Старый 21.11.2015, 17:14   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А я бы делал так:
Код:
 int n=0;
        char s[]="Hello World.Good people?Net!I go to smoking!";
	char s2[255]; memset(s2,0,255);
	for(char *c=strtok(s,".!?");c;c=strtok(0,".!?")){ 
                n++;
		if(n==2) strcpy(s2,c);
	}
if(n==2) {
 Меняем в предложении s2 слов местами
}
Годится идея?
Цитата:
Net!I go to smoking!
Забавно звучит - "Сеть! Я сваливаю пыхнуть"
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.11.2015, 03:35   #3
AgitoLeviafan
Пользователь
 
Регистрация: 21.11.2015
Сообщений: 20
По умолчанию

Идея годиться,но не могли бы расписать ,зачем вы вводили memset и как использовали *c,если не ошибаюсь то это указатель.Просто тему начал проходить совсем недавно,нужно понять,как работает
.
AgitoLeviafan вне форума Ответить с цитированием
Старый 22.11.2015, 10:18   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
зачем вы вводили memset
А чтоб инициализировать строку-получатель нулями. Чтоб все было красиво.
Цитата:
как использовали *c
strtok() ищет в строке символ, указанный в его параметре. Один из символов. Если найдет - ставит вместо него терминатор строки, а результатом выдает указатель на следующий символ. Я вообще-то путанно описал, незважай, так что тебе лучше почитать про эту функцию в умных книгах. Короче говоря - цикл постоянно передвигает указатель начала строки на места, где обнаружены знаки пунктуации. Строка как бы скачет по самой себе.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.11.2015, 09:32   #5
AgitoLeviafan
Пользователь
 
Регистрация: 21.11.2015
Сообщений: 20
По умолчанию

Почитал,всё стало понятно, не могли бы вы еще подсказать как первое слово поставить последним,сказали что нужно сдвиг сделать,через цикл.
AgitoLeviafan вне форума Ответить с цитированием
Старый 23.11.2015, 10:11   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Нет. Сдвиг не поможет. Тебе нужно завести еще строковых переменок, которые будут указателями на части предложения, которые потом через конкатенацию переставить местами
Получится что-то типа:
Код:
char *s2,*q,*w,*s="Предложение";
//Ищем последнее
for(int i=strlen(s)-1;i<=0 && s[i]!=' ';i++);q=&s[i+1]; s[i]=0;
//Ищем конец первого
for(w=s;*w && *w!=' ';w++); *w=0; w++;

s2=strcat(s2,q);
s2=strcat(s2,w);
s2=strcat(s2,s);
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.11.2015, 10:35   #7
AgitoLeviafan
Пользователь
 
Регистрация: 21.11.2015
Сообщений: 20
По умолчанию

Мы эту конкатенацию даже еще не проходили =_= . Дали просто задание и делайте как хотите)
AgitoLeviafan вне форума Ответить с цитированием
Старый 23.11.2015, 13:37   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну дык сделай как хочешь - картбланш же дали.
Хотя не. Не делай. Продолжай лепить отмазки, как Антошка. Картохи тебе не видать.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перенос слов Bagirli Общие вопросы Delphi 5 21.02.2012 12:55
Перенос слов alevtina07 Microsoft Office Word 4 27.10.2011 15:25
Delphi 7; Перенос слов из строки в строку Сароникус Помощь студентам 3 18.10.2011 23:39
Перенос слов Maxs Общие вопросы Delphi 8 02.05.2009 20:58
перенос слов АлёнаP Microsoft Office Access 0 17.03.2009 09:29