Знайти в тексті всі слова, що починаються та закінчуються буквою a, та скопіювати їх в нову рядок через пробіл. Під новий рядок необхідно виділити рівно стільки пам’яті, скільки необхідно для запису знайдений слів.
Розв’язок. Поставлено задачу вирішимо у два етапи: спочатку підрахуємо кількість необхідної пам’яті, а за тим запишемо у новий рядок необхідні слова.
#include <iostream>
#include <conio.h>
#include <string.h>
int main()
{
char str[] = "test word 1: asdda. Test word 2: asdfg, word 3: Awea";
char strCopy[sizeof(str)];
strcpy(strCopy,str);//створюємо копію рядка
char seps[] = " :?!;,.\t\n";//знаки препинания
std::cout<<str<<std::endl;
char *token = strtok(str, seps);//пошук першого слова
int lenResult=0;
int countWord=0; //кількість слів
//Підрахуємо кількість необхідної пам'яты для рядка-результата
while( token != NULL )
{
int last = strlen(token)-1;
if (
(token[0] == 'a' || token[0] == 'A')
&& (token[last] == 'a' || token[last] == 'A')
)
{
lenResult+= strlen(token)+1;
++countWord;
}
token = strtok(NULL, seps );//пошук наступного слова
}
char* resString = new char [lenResult];
resString[0]='\0'; //створюєму пустий рядок
strcpy(str,strCopy);//відновлюємо рядок
token = strtok(str, seps);//пошук першого слова
int curentNumberWord=0;
while( token != NULL )
{
int last = strlen(token)-1;
if (
(token[0] == 'a' || token[0] == 'A')
&& (token[last] == 'a' || token[last] == 'A')
)
{
strcat(resString,token);
++curentNumberWord;
if (countWord!=curentNumberWord)//Якщо не останнє слово
{
strcat(resString," ");
}
}
token = strtok(NULL, seps );//пошук наступного слова
}
std::cout<<"\nResult:\n"<<resString<<std::endl;
delete[]resString;
getch();//задержка экрана
return 0;
}
Контрольні запитання та завдання
1. Що таке рядок символів у мові С++?
2. Розібратися з технікою вводу-виводу рядка у Visual C++.
3. Коли можна не описувати довжину рядка?
4. Познайомитися з функціями роботи з рядками у С++.
3.4 Варіанти індивідуальних завдань
1. Ввести з клавіатури дві строки і замітити першу строку на другу.
2. Порівняти два рядки, якщо вони рівні то вивести повідомлення про рівність.
3. Об'єднати два рядки
4. Підрахувати кількість слів в рядку
5. У тексті слово "країна " замінити словом "Україна"
6. Скільки разів у заданому реченні зустрічаються слова "КСМ" та "СКС" ?
7. Виписати із тексту слова, що починаються та закінчуються цифрою.
8. Знайти у тексті найдовше слово, що складається з цифр.
9. У тексті слово "моє" замінити словом "наше".
10. У тексті виділити всі слова, що починаються літерою "к".
11. Видалити із тексту слова, що закінчуються на "ь".
12. Підрахувати у тексті кількість слів, в яких немає цифр.
13. Вибрати з тексту найдовше слово.
14. Введене речення обробити так, щоб його послідовність слів надрукувати у зворотньому порядку.
15. Надрукувати слово тексту з найбільшою кількістю приголосних звуків.
16. Ввести два речення. Якщо у них є однакові слова, то замінити їх у другому реченні на відповідну кількість символів "*".
17. Підрахувати у тексті кількість слів, в яких немає цифр.
18. Сформувати масив, елементи якого налічують кількість літер у словах речення.
19. Провести кодування та розкодування тексту, вибравши самостійно спосіб кодування.
20. Ввести список українських футбольних команд європейського рівня і у ньому “Металіст” поміняти їх місцями з “Динамо”.
21. Виділити з тексту слова, які мають однакову кількість літер.
22. Виділити з тексту слова, у яких кількість голосних звуків парна.
23. Видалити з тексту програми оператори, що знаходяться всередині дужок.
24. Видалити з тексту усі зайві (більше одного) пропуски .
25. Чи є в тексті слова, що починаються та закінчуються літерою заданою в рядку запиту?
26. Надрукувати усі слова тексту, кількість літер в яких дорівнює даному числу.
27. Якщо у реченні зустрічаються підряд декілька однакових символів, то залишити тільки по одному символу.
28. Знайти в тексті слова, що починаються та закінчуються заданими літерами.
30. У введеному списку з 10 прізвищ визначити найкоротше прізвище.