Опубликован: 14.12.2010 | Доступ: свободный | Студентов: 3125 / 713 | Оценка: 4.53 / 4.12 | Длительность: 26:28:00
Лекция 7:

Символьные массивы в языке С. Работа со строками

< Лекция 6 || Лекция 7: 12345 || Лекция 8 >

Задание 2

  1. В программе для строк добавьте символ окончания строки. Проанализируйте результат выполнения программы.
  2. Скопированную строку выведите на экран дисплея с разрядкой (с пробелами) между символами.
  3. Произведите копирование одной строки в другую при их задании через клавиатуру.
  4. Введите с клавиатуры две строки, различающиеся одним символом. Напишите программу по определению индексов двух различных символов для введенных строк. Длину строк возьмите не менее 7 символов.
  5. Произведите копирование одной строки в другую без применения функции strcpy().
  6. С клавиатуры введите свою фамилию (буквами латинского алфавита), выведите ее на консоль в прямом и обратном порядке, например, Ivanov, vonavI.

Пример 3. Напишите программу преобразования десятичной системы счисления в двоичную. Исходное десятичное число считайте целым без знака.

Программный код решения примера:

#include <stdio.h>
#include <conio.h>

int main (void) {
	const char D[] = {
		'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
	    int newNumber[80];
		long int inputNumber;
		int i = 0, base = 2;
	printf("\n\t Enter a positive integer: ");
		scanf_s("%ld", &inputNumber);
// Прямой процесс преобразования десятичного числа в двоичное
		do {
			newNumber[i] = inputNumber % base;
			++i;
			inputNumber /= base;
		} while ( inputNumber != 0 );

//Запись преобразованного числа в обратном порядке
		printf("\n\t Result after conversion: ");	
for (--i; i >= 0; --i)
		printf("%d", newNumber[i]);
	
	printf("\n\n Press any key: ");
	_getch();
	return 0;
}

В программе использован квалификатор (спецификатор) типа const, который указывает компилятору, что символьный массив не может изменяться в программе.

Результат выполнения программы показан на рис. 6.3.

Перевод десятичного числа в двоичное число

Рис. 6.3. Перевод десятичного числа в двоичное число

Задание 3

  1. Проверьте работу программы с помощью инженерного калькулятора (см. calc через Пуск–Выполнить).
  2. Подсчитайте число итераций цикла для преобразования числа 13 в двоичное число.
  3. Вместо цикла do–while примените цикл while.
  4. Напишите программу преобразования двоичного числа в десятичное число. Проверьте работу программы с помощью инженерного калькулятора.
  5. Проверьте программу для преобразования десятичных чисел в числа с основанием 3 и 8.

Пример 4. С помощью функции strcat() присоедините одну строку к другой с пробелом и без.

Пусть имеются строки str1 и str2. Функция strcat() присоединяет к строке str1 копию строки str2 и завершает строку str1 нулевым символом. Процесс присоединения называется конкатенацией.

Программный код решения примера:

#include <stdio.h>
#include <conio.h>
#include <string.h>
#define N 79

int main (void) {
	char str1[N+1], str2[N+1];

	printf("\n\t Print 1 string of characters: ");
     gets_s(str1, N); // для MS Visual Studio

	printf("\t Print 2 string of characters: "); 	gets_s(str2, N); // для MS Visual Studio

	strcat_s(str1, N, str2); // для MS Visual Studio
	printf("\n\t Result after concatenation: %s\n", str1);
	
     printf("\n Press any key: ");
	_getch();
	return 0; }

Возможный результат выполнения программы показан на рис. 6.4.

Результат конкатенации двух строк

Рис. 6.4. Результат конкатенации двух строк

Задание 4

  1. Дополните программу присоединением трех строк, например, имени, отчества и фамилии пользователя с учетом необходимых пробелов.
  2. Примените посимвольный ввод строк и произведите их конкатенацию с выводом на дисплей результата конкатенации.
  3. Произведите конкатенацию имени и фамилии пользователя с помощью операторов цикла, т.е. без помощи функции strcat(). Предусмотрите пробел между именем и фамилией.
  4. Присоедините к своему имени свою фамилию, записанную в обратном порядке.

Пример 5. Для заданного двухмерного символьного массива сравните длину каждой строки друг с другом и вывести результат сравнения: 1-я строка меньше или больше 2-й строки, строки равны между собой.

Для сравнения двух строк используем библиотечную функцию strcmp(), которая сравнивает в лексикографическом порядке две строки и возвращает целое значение, зависящее от результата сравнения [6.2]. Если первая строка меньше второй, то возвращается значение меньше нуля, если строки равны (по длине), то возвращается нуль, если первая строка больше второй, то возвращается число больше нуля.

Программный код решения примера:

#include <stdio.h>
#include <conio.h>
#include <string.h> // Для функции strcmp()

#define n 2
#define m 80

int main (void)
{
          int i, x;
		char str[n][m] = {
		"hello,",
		"Hello," 	};

	printf("\n\t Array of strings:\n");
for (i = 0; i < n; ++i)
printf("\t %d) %s\n\t (Length: %d)\n", i+1, str[i], strlen(str[i]));

printf("\n\t Comparision of lines: ");
for (i = 0; i < (n - 1); ++i)
{x = strcmp(str[i], str[i+1]);
printf("\n\t Return the function of \"strcmp()\": %d", x);
 
if (x == 0)
printf("\n Line %d is equal to %d?nd line.", i+1, i+2);
 
else if (x > 0)
printf("\n Line %d is not equal to %d?nd line.", i+1, i+2);
  
else if (x < 0)
printf("\n Line %d is not equal to %d-nd line.", i+1, i+2);
}
	printf("\n\n Press any key: ");
	_getch();
	return 0; 
}

Результат выполнения программы показан на рис. 6.5.

Лексикографическое сравнение двух строк

Рис. 6.5. Лексикографическое сравнение двух строк
< Лекция 6 || Лекция 7: 12345 || Лекция 8 >
Мухаммадюсуф Курбонов
Мухаммадюсуф Курбонов