КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Символьная строка, способы ее представления
Урок 13. Тема: «Указатели и строки» 1. Представление строки. В Си строка определяется, как набор символов, заканчивающийся символом ‘\0’, заключенная в двойные кавычки (не апострофы)
Определить строку можно следующими способами: 1) char CH[10]; // массив из 10-ти символов 2) char STR[ ] = “ABCD” // массив из 5-ти символов, 5-ый ‘\0’ автоматически 3) char strokа [4] = {‘S’,’I’,’C’,’\0’}; // при инициализации списком символьный массив приобретает статус строки, если явно в конце записать символ ‘\0’ 4) char *car1 = “строка 1”; // автоматически 5) char *car2 = {“строка 2”}; // прибавляется 6) char *car3 = (“строка 3”); // символ конца строки ’\0’ 7) char *car4; // не инициализированный указатель.
Явная инициализация строки (2,3,4,5,6) разрешена только при определении. Во всех случаях CH, STR, stroka, car1, car2, car3, car4 – адреса первого символа строки. Доступ к элементам строки можно получить двумя способами: 1. [ ] – индексация, 2. * - по адресу. В Си индексация элементов массива ведется с 0. это соглашение языка становиться очевидным, если учесть, что индекс определяет не номер элемента, а его смещение относительно начала массива.
Например, в примере (3) массив stroka состоит из 4 элементов, тогда stroka [0] = ‘S’, strokа [1] = ‘I’, stroka [2] = ‘C’, stroka [3] = ‘\0’ Доступ к элементам строки: Для примера (4). *car – это символ ‘с’ и car [0] - это символ ‘с’ *(car+2) - это символ ‘р’ и car [2]- это символ ‘р’
2. Пример программы перебора элементов строки. //prim5.cpp – чтение элементов строки #include <stdio.h> #include <conio.h> void main() { char *str; cout << “Введите строку символов. \n”; gets (str); // считывает строку из stdin и записывает адреса str, добавляя символ ‘\0’ while (*str!= ‘\0’) // пока не конец строки { putch(*str); str++; //Увеличение адреса на одну ячейку типа char } putch(‘\n’); int count = 0; while (str[count]!=’\0’) // пока не конец строки { putch (str [count]); count ++; } putch(‘\n’); }
При вводе строки “Компилятор языка.” Результат: Компилятор строки. Компилятор строки. В первом while (*str!= ‘\0’) {… str++; } Операторы можно объединить и записывать: while (*str++!= ‘\0’) {…}
3. Снятие игнорирования символов «пробел», «табуляция» для обеспечения ввода строки с пробелами Если считывать строку в массив символов, то поток ввода закончится на первом встретившемся во вводе пробеле. Например: … char name[30]; cin>>name; cout<<mane … Если в этой программе ввести предложение «Флаги нужны всем!», то результатом будет одно слово «Флаги». Чтобы разделители «пробел» и «табуляция» тоже считывались, необходимо отменить игнорирование разделителей и считывать все символы по одному. Для этого необходимо снять флаг skipw, установленный по умолчанию, выполнив следующее: cin>>resetiosflags(ios::skipws);
Пример: … void main() { char name[30]; cin>>resetiosflags(ios::skipws); for(int i=0;I<29;i++) { cin>>name[i]; if(name[i]==enter) break; //если нажали клавишу Enter, то ввод прекратить } name[i]=’\0’; cout<<name; } Если в этой программе ввести предложение «Флаги нужны всем!», то результатом будет «Флаги нужны всем».
В приведенном примере снятие флага «Игнорировать разделители в потоке ввода» выполняется в главной функции. Лучше это делать в отдельной функции, а затем вызывать ее на выполнение. Пример: #include “stdafx.h” // функция игнорирования разделителей void string (char *string) { cin>> resetiosflags(ios::skipws); for(int i=0;I<80;i++) { cin>>string[i]; if(string[i]= =10) break; //если нажали клавишу Enter, то ввод прекратить } string[i]=’\0’; }
// главная функция int main (int argc, char* argv[]) { char *str1; str1=new(char); cout<<”введи строку\n”; string(str1); while (str1!=’\0) // пока не конец строки { cout<<*str1; str1++; } cout<<”\n”; return 0; }
Дата добавления: 2014-01-07; Просмотров: 284; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |