Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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; просмотров: 449; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.226.88.151 (0.006 с.) |