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

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

  1. Again

    Again Гость

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

    Код:
    #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

    Репутация:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    1.339
    Симпатии:
    0
    Алгоритм изначально не мой, т.ч. исправляю так как приходит в голову с первого раза:
    Код:
    #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. Rina
    Ответов:
    1
    Просмотров:
    230
  2. Sniff
    Ответов:
    1
    Просмотров:
    184
  3. komodikus
    Ответов:
    11
    Просмотров:
    573
  4. limbra
    Ответов:
    3
    Просмотров:
    336
  5. uxbmw3w
    Ответов:
    0
    Просмотров:
    569

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