Шаг 67.
Решение задач с использованием строковых функций

    На этом шаге мы приведем решения нескольких задач с использованием ранее рассмотренных функций.


    Пример 1. Напишите программу для замены в слове X всех букв "а" на сочетание "ку".
#include <iostream.h>
#include <string.h>
#include <stdio.h>
void main ()
{
      int k=0,i=0, n;
      char x1[40],x2[80],*px1,*px2;
      cout << "Введите слово не больше, чем из 40 букв \n";
      gets(x1);
      px1 = &x1[0]; px2 = &x2[0]; n = strlen(x1)+1;
      while  (k<n)
      {
         if  (*(px1+k)!='а')
         {
            *(px2+i) = *(px1+k); i++; k++;
         }
         else
         {
            *(px2+i) = 'к'; *(px2+i+1) = 'у'; k++; i += 2;
         }
      }
      puts(x2);
}
Текст этой программы можно взять здесь.


    Пример 2. Напишите программу для замены всех сочетаний "ку" в слове X на букву "а".
#include <iostream.h>
#include <string.h>
#include <stdio.h>
void main ()
{
   int k=0,i=0,n;
   char x1[40],x2[40],*px1,*px2;
   cout << "Введите слово: "; gets(x1);
   px1 = &x1[0]; px2 = &x2[0]; n = strlen (x1)+1;
   while  (k<n)
   {
	if  (strncmp((px1+k),"ку",2)!=0)
	{
		*(px2+i++) = *(px1+k++);
	}
	else
	{
		*(px2+i++) = 'а'; k += 2;
	}
   }
   puts(x2);
}
Текст этой программы можно взять здесь.


    Пример 3. Напишите программу, удваивающую каждую букву слова Х.
#include <iostream.h>
#include <string.h>
#include <stdio.h>
void main ()
{
      char a[140],b[140],*pa=a,*pb=b;
      /* -------------------------------- */
      cout << "Введите слово..."; gets(a);
      int pr = 2*strlen(a);
      *(pb+pr+1) = '\0';
      while  ((*pb = *pa)!='\0')
      {
         pb++; *pb++ = *pa++;
      }
      cout << "\n Результат:"; puts(b);
}
Текст этой программы можно взять здесь.


    Пример 4. Заменить окончание "ing" каждого слова, встречающегося в заданном предложении на "ed".
#include <iostream.h>
#include <string.h>
#include <stdio.h>
void main ()
{
      char L1[80], L2[80];
      char *cp1 = L1, *cp2 = L2, *t;
      cout << "Введите исходный текст...\n"; gets(L1);
      do
      {
         if  ((*(cp1+3)=='\0')||(*(cp1+3)==' '))
         {
            if  (!strncmp(cp1,"ing",3))
            {
               *cp2 = 'e'; *(cp2+1) = 'd';
               cp1 += 3; cp2 += 2;
            }
            else
            {
               *cp2++ = *cp1++;
            }
         }
         else
         {
            *cp2++ = *cp1++;
         }
      }
      while  (*cp1!='\0');
      *cp2 = '\0';
      cout << "Результат: "; puts (L2);
}
Текст этой программы можно взять здесь.


    Пример 5. Вычеркните из слова Х буквы, стоящие на четных местах.
#include <iostream.h>
#include <string.h>
#include <stdio.h>
void main ()
{
      char a[30],b[30],*pa=&a[0],*pb=&b[0];
      cout << "Введите слово не больше, чем из 30 букв\n";
      cin >> a;
      int n = strlen(a)+1, j = 0, i = 1;
      while  (i<n)
      {
         *(pb+j++) = *(pa+i); i += 2;
         if  (i>=n)
            *(pb+j) = '\0';
      }
      puts(b);
}
Текст этой программы можно взять здесь.


    Пример 6. Что напечатает данная программа?
#include <stdio.h>
#define print3(x1,x2,x3) printf("%d %d %d\n",x1,x2,x3)
#define ENUF 3
#define EOS '\0'
#define NEXT(i) input[i++]
#define FALSE 0
#define TRUE 1
char input[]="PI=3.14159, approximately";

void main ()
{
      char c;
      int done,high,i,in,low;
      /* ----------------- */
      i = low=in=high=0;
      while  (c=NEXT(i)!=EOS)
         if  (c<'0')
            low++;
         else  if  (c>'9')
                  high++;
               else  in++;
      print3 (low,in,high);             /* Управление 1 */

      i = low=in=high=0; done = FALSE;
      while  ((c=NEXT(i))!=EOS && !done)
         if  (c<'0')
            low++;
         else  if  (c>'9')
                  high++;
               else  in++;
      if  (low>=ENUF||high>=ENUF|| in>=ENUF)
         done = TRUE;
      print3 (low,in,high);             /* Управление 2 */

      i = low=in=high=0; done = FALSE;
      while  ((c=NEXT(i))!=EOS && !done)
         if  (c<'0')
            done = (++low==ENUF);
        else  if  (c>'9')
                 done = (++high==ENUF);
              else  done = (++in==ENUF);
      print3 (low,in,high);             /* Управление 3 */
}
Решение и комментарии вы можете посмотреть здесь.

    На следующем шаге мы поговорим о параметрах, задаваемых в командной строке.


Предыдущий шаг Содержание Следующий шаг