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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C]"Работа со строками" 
:(
    Опции темы
JIU
Дата 14.12.2007, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Помогите пожалуйста написать следующую программу:
задача.
Слово – всякая последовательность букв латинского алфавита длины не более 20. Предложение – всякая последовательность не более 30 слов, разделенных одним или несколькими пробелами, оканчивающуюся символом ‘.’, ‘!’, ‘?’. Написать программу, читающую заданное предложение, контролирующую его правильность и выполняющую функцию, которая распечатывает все слова, у которых совпадают первые три символа.
                                                                          Заранее спасибо
PM MAIL   Вверх
JIU
Дата 20.12.2007, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я написала программу а она не работает :((
Где ошибка?
Код

#include<stdio.h>
#define N 700
#define M 12
#define K 30


void main()
{
    char str[N],mat[K][M];
    int i,k,s,g=0,p;
    printf("\nInput the string of symbols\n");
    printf("\nwith length not over 30 words\n");
    printf("\nwich ends with . ! or ?\n");
    printf("\nDlina slova ne bolee 12 simvolov\n");
    gets(str);
    i=0;
    while(str[i]!='\0')
        i++;
    k=i;
        if((str[k-1]!='.')&&(str[k-1]!='!')&&(str[k-1]!='?'))
            {printf("\nSentence has no end\n");
            }
        for(i=0;i<N;i++)
        {
            if(('0'<=str[i])&&(str[i]<='9'))
            {    printf("\nYou fool\n");
            
                
            return;
            }
            else{;}

        }
    
        
        for(i=0;i<N;i++)
    {
        for(s=0;s<M;s++)
        mat[g][s]=str[i];
            if(str[i]==' ')
                g++;
        
    }
    
    for(s=0;s<M;s++)
    {
        for(g=0;g<K;g++)
            if((mat[g][s]=mat[g+1][s])&&(mat[g][s]=mat[g+2][s]))
            {
                if((mat[g][s+1]=mat[g+1][s+1])&&(mat[g][s+1]=mat[g+2][s+1]))
                if((mat[g][s+2]=mat[g+1][s+2])&&(mat[g][s+2]=mat[g+2][s+2]))
                    
                
                for(s=0;s<12;s++)
                {
                    
                printf("\n %c",mat[g][s]);
                return;
                }
                g++;
                
            }
            


    return;
                    
    }
    return;



            


}



Это сообщение отредактировал(а) zkv - 20.12.2007, 21:26
PM MAIL   Вверх
orthrus
Дата 21.12.2007, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 400
Регистрация: 30.10.2007
Где: г. Усть-Илимск(Ир кутская обл.)

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



При беглом осмотре нашел вот такие ошибки:
1. В двух первых цыклах for(i=0;i<N;i++), i надо изменять не до N а до k. А то у тебя строка вводится длинной в 70 символов у ты перебераешь все 700.
2. В условиях сравнение осуществляется при помощи оператора ==, а ты там используешь оператор присваивания
Код

            if((mat[g][s]=mat[g+1][s])&&(mat[g][s]=mat[g+2][s]))
            {
                if((mat[g][s+1]=mat[g+1][s+1])&&(mat[g][s+1]=mat[g+2][s+1]))
                if((mat[g][s+2]=mat[g+1][s+2])&&(mat[g][s+2]=mat[g+2][s+2]))


Это сообщение отредактировал(а) orthrus - 21.12.2007, 12:00


--------------------
У того, кто ничего не делает, всегда много помощников.© Л.Н. Толстой
user posted image
PM MAIL ICQ   Вверх
Dov
Дата 21.12.2007, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(JIU @  14.12.2007,  12:47 Найти цитируемый пост)
все слова, у которых совпадают первые три символа.

Это что за слова?
 Такие: 
Цитата
aaadef bbbghj ccckop

или такие:
Цитата
abcdef abcghj abckop




--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
JIU
Дата 21.12.2007, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



orthrus\ спасибо, исправила но все равно не работает
Dov\слова типа  aaab aaac
PM MAIL   Вверх
Dov
Дата 21.12.2007, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Так что ли?  smile 
Код

#include <stdio.h>

#define WORD_LENGTH 12
#define WORDS_COUNT 30

int EndSentence(char end)
{
    return (end == '.' || end == '!' || end == '?');
}

int ValidateSeq(char* seq)
{
    int   len, count = 0;
    char* p = seq;
    
    while(*p)
    {
        for( ; *p && !isalpha(*p); p++)
        {
            if(!isspace(*p) && *(p + 1))
            {
                // недопустимые символы в строке
                puts("\t* #1 *");
                return 0;
            }
        }
        
        for(len = 0; *p && isalpha(*p); p++)
        {
            if(++len > WORD_LENGTH)
            {
                // слишком длинное слово в строке 
                puts("\t* #2 *");
                return 0;
            }
        }
        
        if(*p && ++count > WORDS_COUNT)
        {
            // в строке слишком много слов
            puts("\t* #3 *");
            return 0;
        }
    }
    
    if(!EndSentence(*(p - 1)))
    {
        // строка не содержит завершающий символ 
        puts("\t* #4 *");
        return 0;
    }
    
    return 1;
}

void PrintWords(char* seq)
{
    char* p;
    char* delim = " .?!"; 
    
    printf("Source: %s\nResult:\n", seq);
    
    p = strtok(seq, delim);
    while(p)                           
    {     
        if(strlen(p) > 2 && *p == *(p + 1) && *p == *(p + 2))    
            printf("  %s\n", p);                  
        
        p = strtok(NULL, delim);       
    }
}

int main()    
{
    char str[] = "aaafg g ffggh aaathht hhhgjhhh  mmmja sfffg gg mmmah.";    
    
    if(ValidateSeq(str))
        PrintWords(str); 
    
    return 0;
}


Соответствующие сообщения об ошибках сама напишешь, я надеюсь.  smile 



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
JIU
Дата 4.2.2008, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо за помощь smile
Я написала еще одну программку, которая распечатывает слова, если первые три буквы слова совпадают. Но она не всегда работает.:(Например, если переборщить с пробелами. В чем ошибка?

#include<stdio.h>
#define N 700
#define M 20
#define K 30


void main()
{
    char str[N];
    int i,k,m,n,p,t,j=0;
    printf("\nInput the string of symbols\n");
    printf("\nwith length not over 30 words\n");
    printf("\nwich ends with . ! or ?\n");
    printf("\nDlina slova ne bolee 20 simvolov\n");
    gets(str);
    i=0;
    while(str[i]!='\0')
        i++;
    k=i;    
        if(k>700)
        {    printf("\nERROR\n");
        return;
        }
        if((str[k-1]!='.')&&(str[k-1]!='!')&&(str[k-1]!='?'))
            {printf("\nSentence has no end\n");
            }
        for(i=0;i<N;i++)
        {
            if(('0'<=str[i])&&(str[i]<='9'))
            {    printf("\nYou fool\n");
            
                
            return;
            }
        

        }
        


        i=0;


        for(i=0;i<k;i++)
        
        {    if(str[0]!=' ')
                {    p=str[0];
                    if((str[1]==p)&&(str[2]==p))
                    {
                        for(i=0;i<5;i++)
                        printf("%c",str[i]);
                        break;
                        
                    }
                }
        }


for(i=0;i<k;i++)

        { 
            

                if(str[i]==' ')

                {    
                        m=i;
                        t=str[m+1];
                            if((str[m+2]==t)&&(str[m+3]==t))
                            {
                                n=m+3;
                                for(j=m;j<=n+2;j++)
                                    printf("%c",str[j]);
                                    
                            }
                            if((str[m+2]!=t)&&(str[m+3]!=t))
                            {m=i+4;
                            t=str[m+1];
                            if((str[m+2]==t)&&(str[m+3]==t))
                            {
                                n=m+3;
                                for(j=m;j<=n+2;j++)
                                    printf("%c",str[j]);
                                    
                            }
                            }
                }

                
        }

            return;
}



PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

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


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

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

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

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


 




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


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

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