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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [С++] Строки 
:(
    Опции темы
Jolia
Дата 12.3.2007, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте все!!! Помогите пожаааалуйста....У меня висят 3 задачи по С++, в четверг сдавать, я вроде код написала, но где-то там ошибка, я понять не могу где...не работает и все тут   (((( Посмотрите пожалуйста!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Вот текст задач:
1)    Дана последовательность слов. Напечатать те слова последовательности, которые отличны от последнего слова и удовлетворяют следующему свойству: слово совпадает с начальным отрезком латинского алфавита (a, ab, abc, abсd,...).

2)    В символьной строке заменить все двоеточия ( точкой с запятой (;). Подсчитать количество замен.

3)   Дана непустая последовательность непустых слов из латинских букв; соседние слова отделены друг от друга запятой, за последним словом—точка. Определить количество слов, которые начинаются с буквы а;

Код

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

char zad1(char ss[])
{char alfavit []="abcdefghijklmnopqrstuvwxyz";
int i=0;k=0;
char *slast;
char *s2;
k=strlen(ss);
while (ss[k]!=" ")
   {i++;
    k--;}
strrev(ss);
strncpy(alfavit,slast,i);
strrev(slast);
s2="";
i=0;
while i<=strlen(ss)+1
     {if ((ss[i]=" ")||(i=strlen(ss)+1))
          {if (((strchr(s2,alfavit)!=0)&&(s2!=slast))
          cout<<s2;
                else
                cout<<"Slovo "<<s2<<" ne podhodit";
                s2="";}
     else s2=s2+ss[i];
     i++;}
}


int zad2(char s[])
{int k,i,j;
i=0;
j=strlen(s);
k=0;
char *strptr;
strptr=strchr(s,":"); 
if (strchr=0)
cout<<"V stroke net dvoetochii";
else
{while (i<=j)
   {if (s[i]==":")
    {s[i]=";";
    ++i;}
  ++k;}
cout<<s;
}
return k;}

int zad3(char str[])
{
  int i=0;
  int k;
  if ((str[0]=='A')|| (str[0]=='a')) k=1;
  else k=0;
   while (i<=strlen(str))
    {
     if (str[i]==',')
       {
       if (str[i+1]=='a') ++k;
       }
     ++i;
    }
  return k;
}

int main()
{clrscr();
int q;
cout<<"Vvedite nomer vipolnyaemogo zadaniya";
cin>>q;
switch (q)
{case 1:
{cout<<"Vvedite stroku angliiskogo texta";
char *ss;
ss=new char [150];
gets(ss);
zad1(ss);
break}

case2:
{cout<<"Vvedite stroku teksta";
char *s;
s=new char [150];
gets(s);
cout<<"Proizvedeno zamen";
delete [] s;
break}

case 3:
{cout<<"Vvedite cherez zapyatuyu slova, v konce stroki postavte tochku \n";
char *str;
str=new char[200];
gets(str);
cout<<"V dannoi stroke "<<zad3(str)<<" slov na bukvu A";
delete [] str;
break;}
}
default: cout<<"Nepravilno nabran nomer zadachi";
getchar();
return 0;}




M
Alexeis
Модератор: используйте правильно подсветку http://forum.vingrad.ru/index.php?showtopic=126445


Это сообщение отредактировал(а) Alexeis - 12.3.2007, 20:24
PM MAIL   Вверх
apook
Дата 13.3.2007, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

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

#include<stdio.h>

void zad1( char *ss )
{
char alfavit[ ]="abcdefghijklmnopqrstuvwxyz";
int i, k, j;
char *sprep, slast[ 80 ], *s2=NULL;

for( i=strlen( ss )-1, j=0; i>=0 && ss[ i ]!=' '; --i, ++j )
    slast[ j ]=ss[ i ];
slast[ j ]='\0';
strrev( slast ); //последнее слово

for( i=0, j=0, k=0;  i<=strlen( ss ); ++i, ++k )
    if( ss[ i ]==' ' || i==strlen( ss ) )
    {
        if( k>j ) j=k; //длина длиннейшего слова в строке
        k=0;
        }

sprep=new char[ j ];
strncpy( sprep, alfavit, j );

s2=strtok( ss, " " ); // разобьем строку на слова 

for( ;; )
{
    if( s2 )
    {
        for( i=0, k=0; i<strlen( s2 ); ++i )
        {
            if( s2[ i ]!=sprep[ i ] ) // проверка на соответствие
            { 
                if( i==j ) k=0;
                else k=1;
                break;
                }
            }
        cout << setw( j ) << s2;
        if( k==0 && stricmp( s2, slast )!=0 ) cout << " !";
        cout << endl;
        }
    else break;
    s2=strtok( NULL, " " );
    }

cout << "\n=========\n";
delete sprep;
return;
}


int zad2( char *s )
{
int k=0, i=0;

for( i=0, k=0; i<strlen( s ); ++i )
{
    if( s[ i ]==':' )
    {
        s[ i ]=';';
        ++k;
        }
    }

if( k >0 ) cout << s;
else cout << "V stroke net dvoetochii\n";
return k;
}



int zad3( char str[ ] )
{
int i=0, k=0;

while( i <strlen( str ) )
{
    if( str[ i ]==' ' )
    {
        if (str[i+1]!='a' || str[i+1]!='A' ) ++k;
        }
    ++i;
    }
return k;
}



int main()
{
int q, k;
char *s=NULL;

clrscr();

cout << "Vvedite nomer vipolnyaemogo zadaniya ";
cin >> q;
switch( q )
{
    case 1:
    {
        cout<<"Vvedite stroku angliiskogo texta ";
        s=new char[ 150 ];
        gets( s );
        zad1( s );
        }
    break;

    case 2:
    {
        s=new char[ 150 ];
        cout << "Vvedite stroku teksta";
        gets( s );
        k=zad2( s );
        cout << "\nProizvedeno zamen " << k << endl;
        }
    break;

    case 3:
    {
        s=new char[ 200 ];
        cout << "Vvedite cherez zapyatuyu slova, v konce stroki postavte tochku \n";
        gets( s );
        cout << "V dannoi stroke " << zad3( s ) << " slov na bukvu A ";
        }
    break;

    default:
        cout << "Nepravilno nabran nomer zadachi ";
    }

delete [] s;
getch();
return 0;
}

если правильно плюсик ставь


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
Lamak
Дата 13.3.2007, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



2) и  3) уже работают smile  
Код


char zad1(char ss[])
{
        /*
        char alfavit []="abcdefghijklmnopqrstuvwxyz";
        int i=0,k=0;
        char *slast;
        char *s2="";
        k=strlen(ss);
        while (ss[k]!=' ')
        {
                i++;
                k--;
        }
        ss=strrev(ss);
        strncpy(slast,ss,i);
        slast=strrev(slast);
        ss=strrev(ss);
        i=0;
        while( i<=strlen(ss)+1)
        {
                if ((ss[i]==' ')||(i==strlen(ss)+1))
                {
                        if ((strchr(s2,alfavit[i])!=0)&&(s2!=slast))
                                cout<<s2;
                        else
                                cout<<"Slovo "<<s2<<" ne podhodit";
                        s2="";
                }
                else
                        s2=s2+ss[i];
                i++;
        }
        */
        return 0;
}


int zad2(char *s)
{
        int k=0;
        while (*s++)
        {
                if (*s==':')
                {
                        *s=';';
                        k++;
                }
        }
        return k;
}

int zad3(char *s)
{
        int k=0;
        if((*s=='A')||(*s=='a')) k++;
        while (*s++ != '.')
        {
                if ((*s==',')&&(*(s+1)=='a'))
                {
                        *s=';';
                        k++;
                }
        }
        return k;
}

int main(int argc, char* argv[])
{
        clrscr();
        int q;
        cout<<"Vvedite nomer vipolnyaemogo zadaniya";
        cin>>q;
        char *str;
        str=new char [150];

        switch (q)
        {
        case 1:
                cout<<"Vvedite stroku angliiskogo texta";
                //gets(ss);
                cin>>str;
                zad1(str);
                break;
        case 2:
                cout<<"Vvedite stroku teksta:"<<endl;
                cin>>str;
                cout<<"Proizvedeno zamen"<<zad2(str)<<endl;
                cout<<"Rezultat: "<<str<<endl;
                break;
        case 3:
                cout<<"Vvedite cherez zapyatuyu slova, v konce stroki postavte tochku \n";
                cin>>str;
                cout<<"V dannoi stroke "<<zad3(str)<<" slov na bukvu A";
                break;
        default:
                cout<<"Nepravilno nabran nomer zadachi";
        }

        delete [] str;
        char a;
        cin>>a;

        return 0;
}

а 1) сделаю позже

Добавлено @ 10:37 
Эх, не успел smile !

 smile  
--------------------
Роботы - это интересно и увлекательно! 
PM MAIL   Вверх
Jolia
Дата 13.3.2007, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Всем СПАСИБОЧКИ ОГРОМНОЕ smile , но все равно не работает, при компиляции выдает "Must use C++ for the type iostream" smile ........
PM MAIL   Вверх
apook
Дата 13.3.2007, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Проблема в чем ты компилишь Cи? какой компилятор? может просто
iostream без h smile 

Это сообщение отредактировал(а) apook - 13.3.2007, 18:33


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
Jolia
Дата 13.3.2007, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я в этом деле ничего не понимаю, и в чем компилирую даже понятия не имею((((А что, мое решение 1 задания вообще неправильно?
PM MAIL   Вверх
apook
Дата 13.3.2007, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

и в чем компилирую даже понятия не имею

Хм.
твой первый код напичкан ошибками, похоже кто-то слегка
угарел осбенно по первому варианту зачемно переворачиваешь
строку и вообще вспомогательную строку тоже так-что smile 
но кстати ошибки мелкие и большей частью синтаксические
жаль что не сама... 

вот твой код, в нем убраны ошибки но не изменен смысл
Код

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


char zad1( char ss[ ] )
{
char alfavit[ ]="abcdefghijklmnopqrstuvwxyz";
int i=0, k=0, j;
char *slast, *s2="";

k=strlen( ss );

while( ss[ k ]!=' ' )
{
    i++;
    k--;
    }

strrev( ss );
strncpy( slast, alfavit, i );
strrev( slast );

i=0;
while( i <= (strlen(ss)+1) )
{
    if( (ss[ i ]==' ') || (i==(strlen(ss)+1)) )
    {
        if( (strcspn( s2, alfavit) !=0) && (stricmp(s2, slast) ==0) )
            cout << s2;
        else
            cout << "Slovo " << s2 << " ne podhodit";
        s2="";
        }
    else s2=s2+ss[ i ];
    i++;
    }
return NULL;
}


int zad2( char s[ ] )
{
int k=0, i=0, j=0;
char *strptr=NULL;

j=strlen( s );

strptr=strchr( s, ':' ); 

if( strptr )
    cout << "V stroke net dvoetochii";
else
{
    while( i<=j )
    {
        if( s[ i ]==':' )
        {
            s[ i ]=';';
            ++i;
            }
        ++k;
        }
    cout << s;
    }
return k;
}


int zad3( char str[ ] )
{
int i=0, k=0;

if( (str[ 0 ]=='A')|| (str[ 0 ]=='a') ) k=1;

while( i<=strlen(str) )
{
    if( str[ i ]==',' )
    {
        if (str[i+1]=='a') ++k;
        }
    ++i;
    }
return k;
}




int main()
{
int q;
char *s=NULL;

clrscr();

cout << "Vvedite nomer vipolnyaemogo zadaniya";
cin >> q;
switch( q )
{
    case 1:
    {
        cout<<"Vvedite stroku angliiskogo texta ";
        s=new char[ 150 ];
        gets( s );
        zad1( s );
        }
    break;

    case 2:
    {
        cout << "Vvedite stroku teksta ";
        s=new char[ 150 ];
        gets( s );
int k=zad2( s )
        cout << "Proizvedeno zamen " << k;
        }
    break;

    case 3:
    {
        cout << "Vvedite cherez zapyatuyu slova, v konce stroki postavte tochku \n";
        char *s;
        s=new char[ 200 ];
        gets( s );
        cout << "V dannoi stroke " << zad3( s ) << " slov na bukvu A ";
        }
    break;

    default:
        cout << "Nepravilno nabran nomer zadachi ";
    }

delete [] s;
getchar();
return 0;
}

первый вар-нт просто не будет работать

Это сообщение отредактировал(а) apook - 13.3.2007, 19:07


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
Jolia
Дата 13.3.2007, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



 у меня все-равно не работает, ту ж самую ошибку выдает...вы если у себя проверяли, скажите пожалеста, работала она(правильно) или как?а мой код с убранными ошибками-работает???правильно??просто реально, не знаю что делать-не проверить, ничего(((
PM MAIL   Вверх
apook
Дата 13.3.2007, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Дело швах проверь пожалуйста расширение файла в котором код
он должен быть cpp а не c
во вторых код в котором исправлены ожибки всего лишь компилируется
без ошибок, а работу не делает
Цитата

 в чем компилирую даже понятия не имею

это не сложно ты же куда-то копируешь эти примера чтоб проверить
там и компилируешь значит

сначала Создай проект именно C++ сохрани его и запомни где
скопируй код и жми compile все должно работать


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
Jolia
Дата 13.3.2007, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо за помощь)сейчас попробую осмыслить предложенное вами решение, а это будет нелегко smile Не могли бы вы обьяснить че к чему???Особенно зачем находить самое длинное слово в строке...Буду нечеловечески благодарна!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
PM MAIL   Вверх
apook
Дата 14.3.2007, 05:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Длина самого длинного слова это продолжение мысли
от предложенного тобой примера только там ты нахо
дишь длину первого попавшегося слова. Делается эт
как я понял для сознания некого шаблона дла прове
рки по нему остальных слов т.е такой длинны будет
слово напр abcdifg и т.д сейчас понятно что можно
без этого но все-же что-то в этом есть

Смотри что в твоем пр
Код

k=strlen( ss );

while( ss[ k ]!=' ' )
{
    i++; // <--- вот ищешь длинну
    k--;
    }

Далее идут манипуляции с переворотами строк(непонятные)
Код

strrev( ss );    //<-- вот это  ????
strncpy( slast, alfavit, i ); // <-- а вот создаешь шаблон
strrev( slast ); //<-- и  ????

далее пошли ошибки и опечатки

Код

s2=""; //<-- непонятно зачем
i=0;
while i<=strlen(ss)+1 // грубейшая ошибка while без скобок
     {if ((ss[i]=" ")||(i=strlen(ss)+1)) //<-- ss[i]=" " грубо, две ошибки подряд
          {if (((strchr(s2,alfavit)!=0)&&(s2!=slast)) //<-- s2 != slast строки так сравнивать нельзя(в этом примере)
          cout<<s2; //<-- что выводим?
                else
                cout<<"Slovo "<<s2<<" ne podhodit";
                s2="";}
     else s2=s2+ss[i]; //<--это не Pascal евский string это скомпилируется но с другим эффектом
     i++;}

В общем пример приведенный мной есть усовершенствованный этот пример

Это сообщение отредактировал(а) apook - 14.3.2007, 05:52


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
Jolia
Дата 14.3.2007, 08:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо большое)))))))Я уже почти понимаю что да как, еще немного усилий-и я смогу ее обьяснить)ОГРОМНЕЙШЕЕ СПАСИБО, ЧТО ТАК ДОЛГО СО МНОЙ ВОЗИЛИСЬ) smile 
PM MAIL   Вверх
Jolia
Дата 14.3.2007, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



apook, я б хотела еще кое о чем спросить...точнее вопросов будет много...
Код

#include<conio.h>
#include<string.h>
#include<iostream.h>
#include<iomanip.h>  //эта библиотека для чего?

#include<stdio.h>

void zad1( char *ss )
{
char alfavit[ ]="abcdefghijklmnopqrstuvwxyz";
int i, k, j;
char *sprep, slast[ 80 ], *s2=NULL;  //какую роль выполняет переменная *sprep?

for( i=strlen( ss )-1, j=0; i>=0 && ss[ i ]!=' '; --i, ++j )
    slast[ j ]=ss[ i ];
slast[ j ]='\0';
strrev( slast ); //последнее слово

for( i=0, j=0, k=0;  i<=strlen( ss ); ++i, ++k )
    if( ss[ i ]==' ' || i==strlen( ss ) )
    {
        if( k>j ) j=k; //длина длиннейшего слова в строке
        k=0;
        }//этот цикл вообще можно пропустить???

sprep=new char[ j ];
strncpy( sprep, alfavit, j );//??????????????

s2=strtok( ss, " " ); // разобьем строку на слова 

for( ;; )//впервые вижу такой цикл!!!????????????????????????????????
{
    if( s2 )//????????????????
    {
        for( i=0, k=0; i<strlen( s2 ); ++i )//?????????????????????????для чего это условие?
        {
            if( s2[ i ]!=sprep[ i ] ) // проверка на соответствие      //что с чем сравнивается?
            { 
                if( i==j ) k=0;//??????
                else k=1;//?????????
                break;//?????????
                }
            }
        cout << setw( j ) << s2;//что такое setw( j ) ???
        if( k==0 && stricmp( s2, slast )!=0 ) cout << " !";
        cout << endl;
        }
    else break;
    s2=strtok( NULL, " " );//??????????????????????
    }

cout << "\n=========\n";
delete sprep;
return;//почему слова из строки с алфавитом не сравниваются???
}


int zad2( char *s )
{
int k=0, i=0;

for( i=0, k=0; i<strlen( s ); ++i )
{
    if( s[ i ]==':' )
    {
        s[ i ]=';';
        ++k;
        }
    }

if( k >0 ) cout << s;
else cout << "V stroke net dvoetochii\n";
return k;
}



int zad3( char str[ ] )
{
int i=0, k=0;

while( i <strlen( str ) )
{
    if( str[ i ]==' ' )
    {
        if (str[i+1]!='a' || str[i+1]!='A' ) ++k;
        }
    ++i;
    }
return k;
}



int main()
{
int q, k;
char *s=NULL;

clrscr();

cout << "Vvedite nomer vipolnyaemogo zadaniya ";
cin >> q;
switch( q )
{
    case 1:
    {
        cout<<"Vvedite stroku angliiskogo texta ";
        s=new char[ 150 ];
        gets( s );
        zad1( s );
        }
    break;

    case 2:
    {
        s=new char[ 150 ];
        cout << "Vvedite stroku teksta";
        gets( s );
        k=zad2( s );
        cout << "\nProizvedeno zamen " << k << endl;
        }
    break;

    case 3:
    {
        s=new char[ 200 ];
        cout << "Vvedite cherez zapyatuyu slova, v konce stroki postavte tochku \n";
        gets( s );
        cout << "V dannoi stroke " << zad3( s ) << " slov na bukvu A ";
        }
    break;

    default:
        cout << "Nepravilno nabran nomer zadachi ";
    }

delete [] s;
getch();
return 0;
}




M
Alexeis
Модератор: используйте правильно подсветку кода http://forum.vingrad.ru/index.php?showtopic=126445


P.S.вобщем, я это.....тупая, как сибирский валенок))))))))помоги пожалуста!!!!!мне каждую строку обьяснять надо, чтоб до меня доперло)))))))))))))))))))

Это сообщение отредактировал(а) Alexeis - 15.3.2007, 15:05
PM MAIL   Вверх
apook
Дата 14.3.2007, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

Вопр:
#include<iomanip.h>  //эта библиотека для чего?
Отв:
Эта библиотека нужна для форматирования вывода. setw( 5 ) ознначает вывод начнется через 5 по
зиций курсора
cout << setw( 5 ) << "Hello"
вывод:
    Hello

Вопр:
какую роль выполняет переменная *sprep?
Отв:
в нее копируется кусок алфавита длинной с самое длинное слово в строке

Наша задача найти слова которые соответствуют последовательности( т.е правильной, алфавитной )
Представь что попалось слово abc нам надо сверить его с переменной alfavit (но раз уж у тебя
в примере была введена вспомогательная переменная, то и я построил на этом ход программы)
фактически переменная sprep это обрезанная по самому длинному слову переменная alfavit!Теперь
без нее нельзя или надо переделать код

Вопр:
//этот цикл вообще можно пропустить???
Отв:
Уже сказал выше что нельзя (смирись)

Вопр:
//впервые вижу такой цикл!!!???
Отв:
Вполне приличный цикл, проблема одна - надо позаботиться внутри него чтоб он все-же
когда-то прекратился(не стал бесконечным). Выход из цикла обеспечит оператор break;

Вопр:
if( s2 ) //???
Отв:
Это сокращенная запись if( s2 !=NULL ) то есть понимай так: Если строка не пуста
если встретишь где-нибудь типа: if( !s2 ) понимай: Если строка не не пуста т.е пуста.

Вопр:
for( i=0, k=0; i<strlen( s2 ); ++i )//?????????????????????????для чего это условие
Отв:
Это значит цикл будет продолжаться не будет достигнут конец s2
Можно было догадаться в твоем примере полно таких условий только ты там прибавляешь
единицу по Pascal евскому типу( это неверно ) 
 
Вопр:
if( s2[ i ]!=sprep[ i ] ) // проверка на соответствие      //что с чем сравнивается?
Отв:
У тебя каждое слово прогоняется посимвольно на совпадение с куском алфавита!
точнее первый симол s2 на соответствие первому символу sprep второй второму и т.д
(sprep равен abcd ... ну сама знаешь)

Код

if( s2[ i ]!=sprep[ i ] ) // проверка на соответствие      //что с чем сравнивается?
{ 
    if( i==j ) k=0;//??????
    else k=1;//?????????
    break;//?????????
    }

вообще этот кусок кода означает: символы не совпали выходим из цикла, а то внутри
т.е переменная k(В общем бесполезно но убрать без потерь нельзя) для того чтоб позже узнать
правильно ли был прекращен цикл(с полным совпадением или нет), это тоже последствия настроений
навеянных твоим примером (возможны были другие задачи,??)

Вопр:
cout << setw( j ) << s2;//что такое setw( j ) ???
Отв:
Смотри первый ответ

Вопр:
s2=strtok( NULL, " " );//??????????????????????
Отв:
Изучи как работает strtok
конкретно это означает: следующее слово на место старого

Вопр:
delete sprep;   // НАДЕЮСЬ ПОНЯТНО ТЕПЕРЬ
return;//почему слова из строки с алфавитом не сравниваются???

теперь я понял - ты вряд ли разберешься пока не сочинишь свой вариант
главное улови суть: проверяешь первый символ слова с первым символом
алфавита второй символ слова со вторым символолм алфавита
 и т.д
если не совпали раньше чем достигнут конец слова то слово не подходит

как реализовать дело второе


Это сообщение отредактировал(а) apook - 14.3.2007, 18:13


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
Vetta
Дата 14.3.2007, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А почему идет сначала вывод s2, а потом сравнение с последним словом?
Код

if( s2[ i ]!=sprep[ i ] ) // проверка на соответствие
            { 
                if( i==j ) k=0;
                else k=1;
                break;
                }
            }
        cout << setw( j ) << s2;
        if( k==0 && stricmp( s2, slast )!=0 ) cout << " !";
        cout << endl;
        }

я понимаю, что достала вас...у вас работает???правильно???просто меня препод завтра попросит показать, а у меня-фигушки, не пашет(((
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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