Решение Задачи Связанной С Работой С Символами

Тема в разделе "C/C++/C#", создана пользователем vladis222, 6 дек 2011.

  1. vladis222

    vladis222 Active Member

    Регистрация:
    6 дек 2011
    Сообщения:
    31
    Симпатии:
    0
    Уважаемые пользователи!!! Помогите пожалуйста. Я в этом году поступил в универ на специальность программирование. Но вот мы делаем лабы и застрял на выполнении лабы, связанной с символьной строкой. Тут задание : нужно найти в строке слово, которое является изображением числа кратного 5. Метод я знаю: используется функция strtok которая делит строку на слова. А вот как написать решение на си, не знаю,и не понимаю работу функции strtok в языке си. хоть и читал методичку. Вся надежда на вашу помощь.
    Вот кусок кода, который я написал до функции:

    Код (C++):
    #include <stdlib.h>
    #include <string.h>
    #include <stdio.h>
    #include <ctype.h>
    #include <conio.h>
    #include<locale>
    #define N 80
    int main()
    {setlocale(LC_ALL, "Rus" );
    char L[N]; int k,i;
    char *p; char *str1;
    printf("Введите строку L=%d",L);
    for(i=0;i<N;i++)
    scanf ("%c",&L[i]);
    p=strtok( // но тут видимо неправильно)))
     
  2. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    в цикле выделяешь слова. В каждом слове смотришь на последний символ - если это '0' или '5' - то слово нашел, иначе переходи к следующему слову пока не кончится строка.
     
  3. vladis222

    vladis222 Active Member

    Регистрация:
    6 дек 2011
    Сообщения:
    31
    Симпатии:
    0
    Спасибо, но а как воспользоваться и ввести функцию strtok на языке си для этой проги?
     
  4. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    При первом вызове выделяет первое слово из строки (str) и возвращает указатель на него (если была ошибка то NULL), при этом разделителями являются символы: пробел, запятая и точка.
    word = strtok( str, " ,." );

    При последующих вызовах так же возвращает слова до тех пор пока они не закончатся. Если word == NULL, значит слова закончились.
    word = strtok( NULL, " ,." );
     
  5. vladis222

    vladis222 Active Member

    Регистрация:
    6 дек 2011
    Сообщения:
    31
    Симпатии:
    0
    <!--shcode--><pre><code class='код'>#include <stdlib.h>
    #include <string.h>
    #include <stdio.h>
    #include <ctype.h>
    #include <conio.h>
    #include<locale>
    #define N 200
    int main()
    {setlocale(LC_ALL, "Rus" );
    char L[N]; int k,i,word;char *M;char*p;
    M=&L[0];
    printf("Введите строку L размером меньше 200 символов=%d",L);
    gets(L);
    p=strtok(M, " , ");
    printf(p);
    p = strtok('\0', ", ");
    if(p)
    {printf("|%s", p);
    while(p);
    }
    for(i=0;i<N;i++)
    {
    if(L=0||L=5)
    word++;
    }
    printf("Кол-во слов=%d",word);

    }[/CODE]
    вот такой код я написал, но все равно есть ошибки, можете, пожалуйста, указать на них?
     
  6. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    1. А ты в курсе, что NULL и '\0' это не одно и тоже?
    2. Для выделения каждого нового слова нужно вызывать strtok.
    3. Зачем указывать два пробела: p=strtok(M, " , "); ?
    4. После этой: M=&L[0]; записи, M начинает отражать L. Какой в этом смысл?
     
  7. vladis222

    vladis222 Active Member

    Регистрация:
    6 дек 2011
    Сообщения:
    31
    Симпатии:
    0
    кстати, а что мне нужно переписать в коде, чтобы он работал для моего задания?
     
  8. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Этот код к твоему заданию никакого отношения не имеет.
     
  9. vladis222

    vladis222 Active Member

    Регистрация:
    6 дек 2011
    Сообщения:
    31
    Симпатии:
    0
    Код (C++):
    #include <stdlib.h>
    #include <string.h>
    #include <stdio.h>
    #include <ctype.h>
    #include <conio.h>
    #include "cstdlib"
    #include<locale>
    #define N 200
    int main()
    {setlocale(LC_ALL, "Rus" );
    char L[N];
    int k,i,word,r;
    //char *M;
    char*p;
    //M=&L[0];
    system("CLS");
    //clrscr();
    printf("Введите строку L размером меньше 200 символов\n");
    gets(L);
    p=strtok(L, " ");
    printf("%s \n",p);
    do
    {
    p = strtok(NULL, " ");
    printf("%s \n",p);
    }while(p!=NULL);

    /*проверка слова р на кратность 5*/
    for(i=0;i<N;i++)
    {
    if( p<strlen(p))
    if(p[i]==0||p[i]==5)
    word++;
    }
    printf("Количество слов кратных 5=\n",word);
    for(i=0;i<N;i++)
    {
    if( *p=strlen(p))
    if(L[i]!=0||L[i]!=5)
    word=0;
    }
    printf(" Cлов кратных 5 нет \n");
    getch();
    return 0;
    }

    вот я написал код к проге(разбил строку на слова, теперь после проверки на кратность пяти оно находит какие-то ошибки, можете пожалуйста подсказать,какие?)
     
  10. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Ты пишешь программу, компилируешь, компилятор выдает ошибки, а ты спрашиваешь у нас какие ошибки он тебе выдает??!!!

    Что такое: слово, которое является изображением числа кратного 5 ?!
     
  11. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    вот кусок твоего кода:
    Код (C++):
     /*проверка слова р на кратность 5*/
    for(i=0;i<N;i++)
    {
    /*!!!!!!!!!!!!!*/ if( p<strlen(p))  /*!!!!!!!!!!!!*/  
    if(p[i]==0||p[i]==5)
    word++;
    }
    ты же объявил p как сhar!
    ты вообще знаешь что такое strlen????и как работает??
    ....
     
Загрузка...
Похожие Темы - Решение Задачи Связанной
  1. Даниил
    Ответов:
    0
    Просмотров:
    820
  2. sonia2000
    Ответов:
    0
    Просмотров:
    964
  3. Statussrg
    Ответов:
    1
    Просмотров:
    1.072
  4. Thrillseeker
    Ответов:
    1
    Просмотров:
    1.265
  5. Fransuz
    Ответов:
    1
    Просмотров:
    1.233

Поделиться этой страницей