• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

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

  • Автор темы Again
  • Дата начала
A

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 );
}
 
L

lazybiz

Алгоритм изначально не мой, т.ч. исправляю так как приходит в голову с первого раза:
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 );
}
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!