Задача 153. Определить строку в динамической области памяти. Подсчитать, сколько раз в заданную строку входит каждый её символ. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Задача 153. Определить строку в динамической области памяти. Подсчитать, сколько раз в заданную строку входит каждый её символ.



 

В приведенной ниже программе для подсчета числа вхождений каждого символа предусмотрена функция count(). Функция delchr() удаляет символ после подсчета количества его вхождений в строку.

 

// count2.cpp Программа отлажена в Visual Studio 2008

#include "stdafx.h"

#include<conio.h>

#include<stdio.h>

#include <iostream>

using namespace std;

 

void delchr(char *, char); // прототип функции

 

// Подсчет числа вхождений каждого символа

void count(char *s)

{

char *uk, ch; int k;

while((ch = *s)!='\0')

{

//указатель S не сдвигается!

k=1; uk=s+1;

while(*uk!= '\0')

{

if(ch==*uk)

k++;

uk++;

}

//printf("%c - %d \n",ch,k);

wcout <<L"символ "<<ch<<L" встречается "<<k<<L" раз\n";

delchr(s,ch);

}

}

 

// удаление символа в строке

void delchr(char *s,char c)

{

char *uk=s;

while(*s!='\0')

{

if (*s!=c)

{

*uk=*s;

uk++;

}

s++;

}

*uk='\0';

}

 

int main()

{

char *s; int size;

wcout.imbue(locale("rus_rus.866"));

 

wcout<< L"Укажи длину строки:";

cin>>size; fflush(stdin);

s=(char*)malloc(size);

wcout<< L"Введи строку "; gets(s);

count(s);

getch();return 0;

}

 

Задача 154. Создать функцию, которая находит в заданной строке последнее вхождение символа # и пересылает в другую строку символы, начиная с найденного символа и до конца строки. Если искомый символ не найден, функция возвращает -1, иначе – номер позиции найденного символа в исходной строке.

/ Программа отлажена в Visual Studio 2008

#include<conio.h>

#include<stdio.h>

#include <iostream>

using namespace std;

 

int move_str (char *s1, char *s2)

{

char *uks = s1;

while (*uks)

uks++;

uks--;

while (uks >=s1 && *uks!= '#')

uks--;

char *k = uks;

 

if (uks < s1)

return -1;

else

while (*uks!= '\0')

*s2++ = *uks++;

*s2 = 0;

return (k - s1); //позиция символа #

}

 

 

int main()

{ char s1[]="12345# 6789# END", s2[25];

int k = move_str(s1,s2);

if (k < 0)

puts("# NOT FOUND");

else

{puts(s2); cout << endl<<k;}

return 0;

}

 

Задача 155. Определить строку в динамической области памяти. Создать функцию delsub(str, k, L) для удаления из заданной строки str подстроки длиной L символов, начиная из символа с номером k.

 

 

// Программа отлажена в Visual Studio 2008

#include <stdlib.h>

#include <malloc.h>

#include<conio.h>

#include<stdio.h>

 

#include <iostream>

using namespace std;

 

 

// функция удаления подстроки

void delsub(char *s, int k, int l)

{

char *uk;

if(k>strlen(s)) return;

if(k+l>=strlen(s))

{ *(s+k)='\0';

return;

}

 

s=s+k; uk=s+l;

while(*s++ = *uk++) // копирование

;

//или так: for(s=s+k,uk=s+l; (*s=*uk); s++,uk++);

}

 

int main()

{

int k,l;

int size;

// Устанавливаем локализацию для выходного потока

wcout.imbue(locale("rus_rus.866"));

// Выводим строку на русском!

 

wcout<<L"Укажи длину строки:";

cin>>size; fflush(stdin);

//char *s =(char*)malloc(size);

char *s = new char [size];

wcout<<L"Введи строку "; gets(s);

wcout<<L"Введи k и l ";

cin>>k>>l;

delsub(s,k,l);

puts(s);

getch();return 0;

}

 

 

Задача 156. Проверить, можно ли из букв, входящих в заданное слово (А), составить другое заданное слово (В). Каждая буква исходного слова может быть использована в формируемом слове только один раз.

 

Приведенная ниже программа использует две функции: slova() и del(). Первая из них осуществяет собственно проверку, входит ли каждая буква слова А в слово В. Вторая функция удаляет протестированную букву из слова А. Обратите внимание на тонкий момент: функция slova() работает с переменной flag, которая учитывает удаление последнего символа слова А, на который функция del() пересылает нуль-символ ('\0').

// Программа отлажена в Visual Studio 2008

 

#define L 80

#include <stdio.h>

#include <conio.h>

#include <iostream>

using namespace std;

 

 

void del(char *s,char c)

{

char *uk=s;

while (*s)

{

if(*s!= c)

*uk++=*s;

s++;

}

*uk='\0';

}

 

 

int slova(char *A,char *B)

{ char *uk=A;int flag;

while (*B)

{ A=uk;

putchar(*B);putchar('\n');

flag=0;

while (*A)

{

if(*A==*B)

{ del(A,*A); //*A='*';

flag=1;

puts(uk);

break;

}

A++;

}

if(*A=='\0' && flag==0)

return 0;

B++;

}

return 1;

}

 

int main()

{

char A[L]="интеграл", B[L]="гантели";

// Устанавливаем локализацию для выходного потока

wcout.imbue(locale("rus_rus.866"));

// Выводим строку на русском!

wcout<< L"Введи слово А "; cin >> A;

wcout<< L"Введи слово B "; cin >> B;

 

if(slova(A,B))

wcout<< L"можно";

else

wcout<< L"нельзя";

 

getch();return 0;

}

 

Задача 157. В заданной строке символов содержатся буквы, цифры и, быть может, некоторые другие символы. Создать функцию, которая выделяет из заданной строки только цифры и образует из них натуральное число типа unsigned long, которое и является возвращаемым функцией значением. Считать, что в строке содержится не более 9 цифр. Для обработки текста использовать указатели.

 

// Программа отлажена в Visual Studio 2008

 

#include<stdio.h>

#include<conio.h>

#include <iostream>

using namespace std;

 

unsigned long str_to_numb(char *s)

{

unsigned long m=0; int kzifr=0;

while(*s)

{ if(*s>='0' && *s<='9')

{ m=m*10+(*s-'0');

kzifr++;

}

if(kzifr >= 10)

{

printf("VERY MANY FIGURES - ");

return kzifr;

}

 

s++;

}

return m;

}

 

int main()

{

unsigned long m=0;char s[32]="75ee109wfg639()E";

 

m=str_to_numb(s);

printf("%ld\n",m);

getch(); return 0;

}

 

Задача 158. Создать функцию, которая заданную строку S1[L], каждый символ которой - двоичная цифра ('0', '1'), преобразует в эквивалентное десятичное число типа unsigned long int, которое и является возвращаемым функцией значением. Длина строки не превышает 32.

 

// str_num.cpp Программа отлажена в Visual Studio 2008

#include<conio.h>

#include<stdio.h>

#include <iostream>

using namespace std;

 

unsigned long str_to_number(char *str)

{

unsigned int maska=1;

unsigned long m=0;

char *uk=str;

while(*uk) uk++;

while(--uk>=str)

{

m=m + (*uk-'0')*maska;

maska<<=1;

}

return m;

}

 

int main()

{

char str[33]="01111111111111111111111111111111";

unsigned long m = str_to_number(str);

printf("%ld",m);

getch(); return 0;

}

 

 

Задача 159. Составить программу, которая определяет массив строк poem[4][60] следующего содержания:

 

Едва увидел я сей свет,

Уже зубами смерть скрежещет,

Как молнией, косою блещет

И дни мои, как злак, сечет.

(Державин)

 

Определить две функции, которые позволяют:

а) найти и выдать на экран слова, в которые заданная буква "е" входит два и более раз;

б) перевернуть все слова, которые начинаются заданной буквой "с".



Поделиться:


Последнее изменение этой страницы: 2016-12-16; просмотров: 414; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.81.165.210 (0.024 с.)