Pers.narod.ru. Алгоритмы. Упражнения на разбор по словам с функцией token

В строке 2-е и последнее слова записать наоборот, в конце предложения - точка.

#include <conio.h>
#include <stdio.h>
#include <string.h>

void main () {
 char *s="This is a test message for my cool program";
	//задали строку
 char *separators="\t ";
	//задали возможные разделители слов
 char copy[80];
	//задали буфер для строки результата

 char *token = strtok (s, separators);
	//функция strtok умеет делать разбор на слова
	//- нашли первое слово
 char *pred;
	//указатель на предыдущее слово, найденное strtok

 clrscr();

 memset (copy,'\0',80); //буфер заполнили нулями

 int i=1;
 printf("\nword %d = %s\n", i, token);
 while (token != NULL) { //пока еще есть слова
  i++;			//счетчик слов +1
  pred = token;	//запоминаем пред. слово
  token = strtok (NULL, separators); /* next word  */
  if (i==2) { strrev (token); }			//выделяем 1-е
  if (token == NULL) { strrev (pred); }		//и последнее слова
  printf("\nword %d = %s\n", i, pred);		//печатаем слова
  strcat (copy,pred);		//переписываем слово в буфер
  strcat (copy," ");		//и добавляем после него пробел
 }

 copy[strlen(copy)-1]='.';	//точка в конце предложения
 puts (copy);
}

В тексте содержимое всех слов длиннее 2 символов заменить последовательностью из заданного символа, оставив без изменения только крайние слова.

#include <conio.h>
#include <stdio.h>
#include <string.h>

void main () {
 char *s="This is a test message for my cool program tt";
 char *separators="\t ";
 char copy[80];
 char c='!';
 char *cstr=" ";
	//в строку cstr запишем символ c, 
//чтобы использовать вызов strcat

 char *token = strtok (s, separators);
 char *pred;

 clrscr();

 memset (copy,'\0',80);
 cstr[0]=c;

 int i=1;
 printf("\nword %d = %s\n", i, token);
 while (token != NULL) {
  i++;
  pred = token;
  token = strtok (NULL, separators);
  printf("\nword %d = %s\n", i, pred); 
  if (i==2 || token == NULL || strlen(pred)<3) {
	//если первое или последнее слово или длина слова 
	//меньше 3 букв, то без изменения
   strcat (copy,pred);
  }
  else {	//иначе пишем вместо слова нужное число символов c
   for (i=0; i<strlen(pred); i++)
    strcat (copy,cstr);
  }
  strcat (copy," ");
 }

 copy[strlen(copy)-1]='.';
 puts (copy);
}

Рейтинг@Mail.ru

вверх гостевая; E-mail
Hosted by uCoz