1. Наш канал codeby в telegram. Пишем об информационной безопасности, методах защиты информации, о программировании. Не пропускай новости с кодебай, будь в тренде ! Подробнее ...

    Скрыть объявление

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

Тема в разделе "Вопросы новичков и не только", создана пользователем 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 );
    }
     
Загрузка...

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