RUS Уроки по программированию на языке С (Примеры задач на новый материал.)
Примеры задач на новый материал.
В данном разделе урока, мы приготовили для Вас несколько интуитивно понятных
примеров c использованием указателей.
Программа для замены в слове X всех букв "a" на сочетание "ky".
#include <string.h>
#include <stdio.h>
void main ()
{
/*
k - переменная для прохода по оригинальному массиву
i - переменная для прохода по результативному массиву
n - длина оригинального массива
*/
int k=0,i=0, n;
/*
x1 - оригинальный массив
x2 - результативный массив (больше в два раза, на
случай, если оригинальный весь заполнен буквами 'a')
px1 - указатель для перемещения по оригинальному массиву
px2 - указатель для перемещения по результативному массиву
*/
char x1[40],x2[80],*px1,*px2;
// Запрос на ввод оригинального массива
puts( "Enter word (max 39 letters) ");
gets(x1);
/*
записываем адреса начала
оригинального и результативного
массивов в указатели
*/
px1 = x1;
px2 = x2;
/*
вычисляем рельную длину
оригинального массива
*/
n = strlen(x1)+1;
// цикл поэлементно перебирает
// оригинальный массив
while (k<n)
{
// если значение текущего элемента
// не совпадает с 'a'
if (*(px1+k)!='a')
{
// копируем текущий элемент
// в результативный массив
*(px2+i) = *(px1+k);
// переходим к следующим элементам
i++;
k++;
}
// если значение текущего элемента
// совпадает с 'a'
else
{
// записываем символ 'k' в текущую
// позицию результативного массива
*(px2+i) = 'k';
// записываем символ 'y' в следующую
// позицию результативного массива
*(px2+i+1) = 'y';
// переходим к следующему элементу
// оригинального массива
k++;
// "перепрыгиваем" через один элемент
// результативного массива
i += 2;
}
}
// демонстрируем результативный массив
puts(x2);
}
|
Программa для замены всех сочетаний "ky" в слове X на букву "a".
#include <string.h>
#include <stdio.h>
void main ()
{
/*
k - переменная для прохода по оригинальному массиву
i - переменная для прохода по результативному массиву
n - длина оригинального массива
*/
int k=0,i=0, n;
/*
x1 - оригинальный массив
x2 - результативный массив
px1 - указатель для перемещения по оригинальному массиву
px2 - указатель для перемещения по результативному массиву
*/
char x1[40],x2[40],*px1,*px2;
// Запрос на ввод оригинального массива
puts( "Enter word (max 39 letters) ");
gets(x1);
/*
записываем адреса начала
оригинального и результативного
массивов в указатели
*/
px1 = x1;
px2 = x2;
/*
вычисляем рельную длину
оригинального массива
*/
n = strlen(x1)+1;
// цикл поэлементно перебирает
// оригинальный массив
while (k<n)
{
// проверяем, если два символа
// в текущей позиции оригинального
// массива не совпадают с буквосочетанием "ky"
if (strncmp((px1+k),"ky",2)!=0)
{
// просто копируем один символ
// из текущей позиции в
// результативный массив и
// передвигаемся на символ вперед
*(px2+i++) = *(px1+k++);
}
// если же два символа
// в текущей позиции оригинального
// массива совпадают с буквосочетанием "ky"
else
{
// записываем в результативный массив
// символ 'a', и переходим на один
// символ вперед. В оригинальном переходим
// на два символа вперед
*(px2+i++) = 'a';
k += 2;
}
}
// демонстрируем результативный массив
puts(x2);
}
|
Программa, удваивающая каждую букву слова Х.
#include <string.h>
#include <stdio.h>
void main ()
{
// n - длина оригинального массива *2
int n;
/*
x1 - оригинальный массив
x2 - результативный массив (больше в два раза)
px1 - указатель для перемещения по оригинальному массиву
px2 - указатель для перемещения по результативному массиву
*/
char x1[40],x2[80],*px1,*px2;
// Запрос на ввод оригинального массива
puts( "Enter word (max 39 letters) ");
gets(x1);
/*
записываем адреса начала
оригинального и результативного
массивов в указатели
*/
px1 = x1;
px2 = x2;
/*
вычисляем двойную длину
оригинального массива
*/
n = 2*strlen(x1);
// записываем в последний элемент
// результативного массива '\0'
*(px2+n) = '\0';
// цикл поэлементно перебирает
// оригинальный массив
while ((*px1)!='\0')
{
// записываем значение из текущей позиции
// оригинального массива в текущую позицию
// результативного массива, в последнем
// переходим на один элемент вперёд
*px2++ = *px1;
// записываем значение из текущей позиции
// оригинального массива в текущую позицию
// результативного массива, в обоих массивах
// переходим на один элемент вперёд
*px2++ = *px1++;
}
// демонстрируем результативный массив
puts(x2);
}
|
|
Категория: C | Добавил: DEN-SHP (05.11.2012)
|
Просмотров: 885
| Рейтинг: 0.0/0 |
Добавлять комментарии могут только зарегистрированные пользователи.
[
Регистрация |
Вход ]