Помогите пож-ста дописать ф-цию на Си(очень срочно)

Тема в разделе "C/C++/C#", создана пользователем Again, 25 дек 2010.

  1. Again

    Again Гость

    Ф-ция word возвращает n-ное слово из строки s (слово-любой набор символов кроме пробельных). Что нужно дописать в ф-цию для пропуска пробелов между словами, т. к. при вводе, например, следующей строки: "asd__fgh_jkl"(между asd и fgh 2 пробела)и вводе n=3 программа выдаёт "fgh", а должна выдавать "jkl".

    Код (C++):
    #include <stdio.h>
    #include <stdlib.h>

    char w[40];

    int word(char *s, int n)
    {
    char *p = w;
    char *MyStr = s;
    while (*MyStr == ' '||*MyStr=='\t')
    MyStr++;

    int nc = 0;
    while (n> 1)
    {
    if (*MyStr == '\0'&& n >1)
    {
    printf("Takogo slova net\n");
    return 0;
    }
    if (*MyStr ==' '||*MyStr=='\t')
    n--;
    MyStr++;
    }

    while ((*MyStr!=' '&&*MyStr!='\t'&&*MyStr!='\0') && nc<40)
    {
    *p++ = *MyStr++;
    nc++;
    }
    return 0;
    }


    void main()
    {
    int n;
    char s[1024]={0};
    char *MyStr=s;
    printf("Vvedite stroku : ");
    gets(s);

    if(*MyStr)  printf("Nomer videl'aemogo slova : ");

    else {
    printf("Stroka pusta!\n");
    exit (1);
    }

    scanf("%d",&n);

    if (n<=0) {
    printf( "n doljno bit' > 0\n" );
    getch();
    exit (2);
    }

    word( s, n );

    printf( "%s\n", w );
    }
     
  2. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Алгоритм изначально не мой, т.ч. исправляю так как приходит в голову с первого раза:
    Код (C++):
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>

    char w[40];

    int word( char *s, int n )
    {
    int     nc = 0;
    char *  p = w;
    char *  MyStr = s;
    while ( *MyStr == ' '|| *MyStr == '\t' ) MyStr++;

    while ( n > 1 ) {
    if ( *MyStr == '\0' && n > 1 ) {
    printf( "Takogo slova net\n" );
    return 0;
    }

    if ( *MyStr == ' '|| *MyStr == '\t' ) {
    while ( *MyStr == ' ' || *MyStr == '\t' ) MyStr++;
    MyStr--;
    n--;
    }
    MyStr++;
    }

    while ( (*MyStr != ' ' && *MyStr != '\t' && *MyStr != '\0' ) && nc < 40 ) {
    *p++ = *MyStr++;
    nc++;
    }
    return 0;
    }


    void main()
    {
    int     n;
    char    s[1024] = {0};
    //  char    s[]     = "  one two three four five";
    char *  MyStr = s;

    printf( "Vvedite stroku: " );
    gets( s );

    if ( *MyStr )
    printf("Nomer videl'aemogo slova : ");
    else {
    printf( "Stroka pusta!\n" );
    exit( 1 );
    }
    scanf( "%d", &n );

    if ( n <= 0 ) {
    printf( "n doljno bit' > 0\n" );
    getch();
    exit( 2 );
    }
    word( s, n );
    printf( "%s\n", w );
    }
     
Загрузка...
Похожие Темы - Помогите пож ста
  1. limbra
    Ответов:
    3
    Просмотров:
    47
  2. uxbmw3w
    Ответов:
    0
    Просмотров:
    69
  3. GREED
    Ответов:
    1
    Просмотров:
    538
  4. Рая
    Ответов:
    3
    Просмотров:
    790
  5. sonia2000
    Ответов:
    0
    Просмотров:
    960

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