Адрес этой страницы изменился на http://www.nickolay.info/algorithms/cpp_tokens.html. Причины переезда
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);
}
|
|