Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

programmirovanie / ОПиАЯ_№3_5

.doc
Скачиваний:
32
Добавлен:
03.03.2016
Размер:
77.31 Кб
Скачать

3.4 СТРОКИ

printf(“Введите значениеa%d”,a);

Пример 1

(“Введите значение a %d”,a);

строковая const

21 символ, в т.ч.””

Пример 2.

#define ERR RPINT “***Error”

Объявление и инициализация строковых переменных.

Строки представляются в виде массивов типа char

Пример:

char string var[ 30 ];

/*строка длиной [0 – 29] символов */

char V[ ] = {‘A’,’E’,’I’,’O’,’U’};

/*V[5] */

char V[5] = “AEIOU”;

char str[20] = “strokov”;

Размещение в ОП массива str

[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [19]

s t r o k o v \0 ? ? …

str [7] содержит нулевой символ (NULL) “\0”, отмечающий конец строки.

Использование маркера конца строки позволяет длине строки в символьном

Массиве варьироваться от 0 и до размера на единицу меньше, чем объявленный. Все функции обработки строк игнорируют все, что хранится в ячейках после нулевого символа.

MAX возможная длина массива str

0 1 2 3 18 19

\0

19 символов

Массивы строк – двумерный массив символов, в котором каждый ряд является одной строкой.

Пример: массив для хранения 30 фамилий, каждая из которых  25 символов длиной.

#define N NAM 30

#define N LEN 25

char names [N NAM][N LEN]

Пример:

Char month[12][10] = {“Jan”,”Feb”,”March”,”April”,”May”,”Jun”,”Jul”,”Aug”,

“Septem”,”Okt”,”Nov”,”Dec”};

Ввод – вывод символов %S

Printf (“месяцы : %S”,montch[][])

Спецификации

Пример ввода:

Char d[10];

scanf (“%S”,d);

printf(“%S”,d);

При вводе пропускаются пустые символы (“пробел”,TAB,символ новой строки). Начиная с первого значащего символа scanf копирует встречающиеся символы в последовательные ячейки памяти. Когда встречается “пробел”, сканирование останавливается и scanf добавляет null в конце строки.

Пример: char d[10]

[0] [1] [2] [3] [4] [5] [9]

С Л О В О \0 ? ? ? ?

Данные ввода: СЛОВО

Лучшие стандартные функции!!!

#include <string.h>

/*библиотека для работы со строковыми переменными*/

Пример ввода:

strassign (d,”слово”,10);

/* функция присвоения строк*/

char d[ ] - выходная строка-приемник

const char src[ ] - входная строка-источник

int dest_len - максимальная длина.

int strlen (char src[ ])

входной аргумент-строка возвращает количество

символов без “\0”

int k; char d[ ] = {‘И’,’М’,’Я’};

k = strlen (d);

char substr( char dest[ ], /*выходная строка назначение*/

const char src[ ], /*входная строка-источник*/

int st, /*входной индекс 1-го символа в src[ ]*/

int enol, /*индекс следующий за последним включаемым*/

int dest_len) /*входной дополнительный параметр в dest*/

Пример:

char last[20], f[20], m[20];

char pr[20] = “Adams, Johp, Quinly”;

01234

substr(last, pr, 0, 5, 20)

substr(f, pr, 7, 11, 20)

Функции преобразования данных

Прототипы в <stdlib.h>

Пример: int  строка

Преобразуют в строку символов “123”

itoa (123, S, 10) int

ltoa (123L, S1, 10) long int

123 S[0]  1

[1]  2

[2]  3

Пример: строка  число

int k1;

k1 = atoi(“123”)  123 (int)

atol(“123”)  123 (1.2310)

atof(“123”) 123 (число 1.230000Е+02)

Пример: реверсирование строки S

#include <stdio.h>

const Ls = 81;

main ( )

{char S[Ls], R;

int L, I;

printf (“\n введите S”);

gets (S);

printf (“\n исх.строка%S”, S);

for (L = 0; S[L] != ‘\0’; L++);

for(I = 0; I < L/2; I++)

{R = S[I];

S[I] = S[L-I-1];

S[L-I-1] = R;}

printf (“\n рев.строка:%S”,S);

}

Эквивалент.

#include <stdio.h>

#include <string.h>

main ( )

{ char *S;

gets (S);

printf (“\n исх.строка%S”,S);

strrev (S);

printf( “\n рев.строка %S”,S);

}

Строковые функции СИ.

Пример инициализации char – массива

char S[ ] = “Мир!”;

char S[ ] = “Мир!”;

char S[ ] = {‘М’,’и’,’р’,’!’,’\0’};

Строковая константа участвует в инициализации указателя типа char*,

адрес 1-го символа константы есть начальное значение указателя.

Пример:

char *S = “Разрешить…”;

S – переменная – указатель, начальное значение S равно адресу 1-го символа “P” (сама константа находится в сегменте данных загрузочного модуля программы)

int A[3], *P;

P = A или P = &A[0];

*(P + 2) ссылка на 3-й элемент массива S

*(P + 2)  A[2]

Протптипы строковых функций в заголовочном файле <string.h>

Функция strlwr( )

Пример:

strlwr (“ClrScr”)  прописные в строчные

результат: строка “ClrScr” для латинского алфавита

Пример:

strupr (“file”) 

результат: строка “FILE”

Операндами отношений могут быть символы.

Пример:

“ T “ > “ D “ истина, так как код “ T “ = 146, а “ D “ = 132

Функция strcmp( ) сравнивает строку1 со строкой2, различая прописные и строчные.

Пример:

strcmp ( “Тигр”,”Днепр”);

str1 str2

возвращает int = 0, если строки одинаковые

 0, если str1 > str2

< 0, если str1 < str2

int K;

K = strcmp ( “ T “, “ D “ );

результат : К = 14 = 146 – 132

Пример:

Stricmp (“ Russia”, “RUSSIA”);

Сравнивает, не различая регистры. Код возврата = 0.

“Склейка”

Пример:

SS = strcat( “Марк”, “шейдер”);

Результат: “Маркшейдер”.

Пример:

str1 str2

S = strncat ( “ ”, “политехник”, 4);

Присоединяе 4 символа из str2 в конец str1

S = strncat ( S,”шинель”,6);

Результат : “полишинель”.

Пример:

int Len;

Len = strlen(“Скоро_ссесия”);

Результат Len  12

Пример:

S = “Длинношеее”;

S1 = “Георгий”;

5 симв.

Результат: S = “Георгошеее”;

5симв.

  • S [5] = ‘\0’;

  • Результат S = “Георг”;

Пример:

char strstr (“ исидора”, “сидор”);

результат: “сидор”, если входит и NULL , если не входит.

Пример реверса:

char strrev (“хорош”);

результат : ” шорох ”.

SIMVOL.C

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

main( )

{ char S[ ] = “YPA!”;

char S1[5] =”BYE”;

char S2[6] = {‘X’,’A’,’-‘,’X’,’A’,’\0’};

char *S3;

char S7[50];

char d[100], d1[100];

int I, j;

clrscr( );

S3 = “DON”;

printf(“S = %s”, S); S = YPA!

printf(“\nS1 = %s”,S1); S1 = BYE

printf(“\nS2 = %s”,S2); S2 = XA-XA

printf(“\nS3 = %s”,S3); S3 = DON

gets(S7); /*c probel*/ 12345_7<enter>

printf(“\nnklan S7 = %s”,S7); S7 = 12345_7

strcpy(S7,”ffff”);

printf(“\nnstrcpy S7 = %s\n”,S7);

scanf(“%s”,S7); /*bez probel*/ 456_789

printf(“\nprintf S7 = %s”,S7); = 456

/*kod simvola*/

printf(“\n kod simvola ‘%c’ %d”, ‘T’, ‘T’); код simvola ‘T’_84

/*strassign(d, “slovo”, 6);*/

i = strlen(S1);

printf(“\nkol-vo simvolov S1 = %d”, i); = 3

printf(“\nkol-vo simvolov S2 = %d”, strlen(S2)); = 5

getch( );

printf(“\n\n %s”, strlwr(“RiRi”)); riri

strcpy(d, “File”);

printf(“\n\n %s”, strupr(d)); FILE

strcpy(S7, “file”);

printf(“\n\n srav d S7 %d”, strcmp(d, S7)); /*-32*/

printf(“\n\n srav d S7 %d”,stricmp(d,S7)); /* 0 */

getch( );

printf(“\n\n %s”,strcat(d,S7)); FILEfile

printf(“\n%s”,strncat(“”,”politex”,$)); poli

strncat(d,”cat”,2);

printf(“\n\n %s”,d); FILEfileca

strcpy(S7,”yyyyyyy”);

strncpy(d,S7,3); в начало замена “yyy”

printf(“\n\n d= %s”,d); = yyyEfileca

d[3] = ‘\0’;

printf(“\n d= %s”,d); = yyy

clrscr();

printf(“\n\n %s”,strstr(“pole”,”le”)); le (при вхождении строки

“le” в строку “pole”

if(strstr(“jki”,”1”) == NULL)

str1 str2 не входит str2 в str1

printf(“\n mesto bxoda NULL”);

printf(“\n %s”,strrev(“asdf”)); fdsa

strcpy(d,strrev(“qwer”)); присвоение

printf(“\n d= %s”,d); d = rewq

itoa(123,d,10);

printf(“\n d= %s”,d); d = 123

printf(“\n %f”,atof(“456”)); 456.000000

getch( );

}

substr (S7, S1, 0, 3, 10);

Соседние файлы в папке programmirovanie