Новосибирский Государственный Университет
Опубликован: 26.08.2005 | Доступ: свободный | Студентов: 17932 / 3054 | Оценка: 4.07 / 3.55 | Длительность: 13:11:00
ISBN: 978-5-9556-0057-4
Лекция 13:

Символьные строки и функции над ними

< Лекция 12 || Лекция 13: 12345 || Лекция 14 >

Ввод-вывод строк

fgets - прочитать строку из входного потока, включая символ новой строки.

Объявления: char *fgets (s, n, stream)
char *s;
int n;
FILE *stream;

gets - прочитать строку из стандартного файла ввода stdin.

Определение: char *gets (s)
char *s;

fputs - записать строку в поток stream.

Определение: int fputs (s, stream)
char *s;
FILE *stream;

puts - записать строку в стандартный файл вывода stdout. В конце строк записывается символ новой строки.

Определение: 
int puts (s)
char *s;

Обработка строк

Для выполнения описанных в этом подразделе функций необходимо включить в программу файл string.h командой

#include <string.h>

strcat - сцепить две строки.

Определение: char *strcat(s1,s2)
char *s1, *s2;

Пример 1:

/* сцепить две строки */
/* в головном файле conio.h содержится функция очистки экрана clrscr( ) */
#include <string.h>
#include <stdio.h>
#include <conio.h>
int main(void)
{ clrscr();
	char destination[25];
	char *blank = " ", *c = "C++", *turbo = "Turbo";
	strcpy(destination, turbo);
	strcat(destination, blank);
	strcat(destination, c);
	printf("%s\n", destination);
	getch();
	return 0;
}

strncat - сцепить две строки, причем из второй строки копировать не более n символов.

Определение: char *strncat(s1,s2,n)
char *s1, *s2;
int n;

Пример 2:

/* cцепить две строки, причем из второй строки
копировать не более n символов */
#include <string.h>
#include <stdio.h>
#include <conio.h>
int main(void)
{
clrscr();
	char destination[25];
	char *source = "structured ";
	strcpy(destination, "programming");
	strncat(destination, source, 11);
	printf("%s\n", destination);
	getch();
	return 0;
}

strcmp - сравнить две строки в лексикографическом порядке.

Определение: int strcmp(s1,s2)
char *s1, *s2;

Пример 3:

#include <string.h>
#include <stdio.h>
#include <conio.h>
int main(void)
{
	char *buf1 = "aaa", *buf2 = "bbb", *buf3 = "ccc";
	int ptr;
	clrscr();
	ptr = strcmp(buf2, buf1);
	if (ptr > 0)
		printf("buffer 2 is greater than buffer 1\n");
	else
		printf("buffer 2 is less than buffer 1\n");
	ptr = strcmp(buf2, buf3);
	if (ptr > 0)
		printf("buffer 2 is greater than buffer 3\n");
	else
		printf("buffer 2 is less than buffer 3\n");
	getch();
	return 0;
}
< Лекция 12 || Лекция 13: 12345 || Лекция 14 >
Максим Сикстус
Максим Сикстус

При выполнении кода из Лекции 11, стр.2 получается результат:

x ravno 16.
x ravno 4.
x ravno 16.
x ravno 14.
x ravno 100.
x ravno 36.

Связано ли это с утверждением, что : "Единственным исключением при замене является макроопределение, находящееся внутри двойных кавычек"?

Андрей Белоусов
Андрей Белоусов

Я изучаю лекцию 5 и в ней есть выражения:

char *pc;

pc = (char*)0777;

Я так понял что, char *pc это ссылка на переменную pc,

0777 это тип int восьмиричный. А что делает выражение:

 pc = (char*)0777;

Юрий Цыганов
Юрий Цыганов
Россия, Вологда, Вологодский государственный педагогический университет, 2006
Арман Овсепян
Арман Овсепян
Армения, Ереван