if (strcmp(s.passw) == 0) k = 1; /* тіркестерді салыстыру функциясы */ } if (k) printf("\nпароль қабылданды"); else printf("\nпароль қабылданбады"); return 0; } Тіркестермен жұмыс істеу кезінде нұсқауыштар жиі қолданылады.
НАЗАР АУДАРЫҢЫЗ Тіркестермен жұмыс істеу кезінде жиі кездесетін қателіктер – нөл-символдың
жоқ болуы жəне тіркесті қарастыру кезінде нұсқауыштың тіркес шекарасынан
шығып кетуі.
Енді
src тіркесін
dest тіркесіне көшіру процесін қарастырайық. Оның
алгоритмі төмендегідей болады:
char src[10], dest[10]; ... for (int i = 0; i<=strlen(src); i++) dest[i] = src[i]; Тіркес ұзындығы
strlen функциясы арқылы анықталады, бұл функ-
ция тіркес ұзындығын нөл-символдың тұрған орнын іздеу жолымен есептеп
шығарады. Осылайша, тіркес екі рет қарастырылады. Нөл-символға тексеруді
тікелей программаның орындалу барысында анықтаған айтарлықтай тиімді бо-
лып табылады. Индексті арттыруды нұсқауыштар инкрементімен алмастыруға
болады (ол үшін
src тіркесіне жады динамикалық түрде бөлінуі тиіс, соны-
мен қатар, қосымша нұсқауышты анықтап, оны
dest тіркесінің бастапқы
адресімен инициалдау керек):
#include int main(){ char *src = new char [10]; char *dest = new char [10], *d = dest; cin >> src; while (*src != 0) *d++ = *src++; *d = 0; // аяқтаушы нөл cout << dest; return 0; } Цикл ішінде тіркестер элементтерін символдап меншіктеумен бірге,
нұсқауыштарды инкременттеу қоса орындалады. Меншіктеу операциясының
нəтижесі – берілетін мəн, ол цикл шартында тексеріледі, сондықтан меншіктеуді
шарттың орнына қойып, нөлге тең емес екенін тексеру шартын алып тастауға
болады (мұнда аяқтаушы нөл циклде көшіріледі, оны меншіктеу үшін жеке
65
оператордың қажеті жоқ). Осылардың нəтижесінде тіркесті көшіру циклінің
шарты келесідей түрде болады: