![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву ![]() Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Задача 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; просмотров: 455; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.223.125.35 (0.011 с.) |