Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.12.2011, 19:53   #1
datgen
Пользователь
 
Регистрация: 30.03.2011
Сообщений: 36
По умолчанию объясните программу

Код:
#include "stdafx.h"
#include "iostream"

void strcaty (char *a, char *b, char *c) //через индексацию
{
  int i, j;
  for (i = 0; a[i]; i++) c[i] = a[i];
  for (j = 0; b[j]; j++) c[i + j] = b[j];
  c[i + j]=0;
}
void strcaty1 (char *a, char *b, char *c) //арифметика указателей
{
  int i, j;
  for (i = 0; *(a + i) ; i++) c[i] = *(a + i) ;
  for (j = 0; b[j]; j++) c[i + j] = b[j];
  c[i + j] = 0;
   }
int _tmain(int argc, _TCHAR* argv[])
 { char s1[50],s2[50],s3[999],s4[999];
strcpy(s1,"hello world");
 strcpy(s2,"cool day");
 strcaty(s1,s2,s3);
 strcaty1(s1,s2,s4);
printf("index=%s\n\n",s3);
printf("ukazately=%s\n\n",s4);
system("pause");
return 0;
}
объясните пожалуйста как работают эти две функции которые мы вызываем.не понимаю как работает циклы for в той программе и почему в конце пишем c[i + j] = 0.

Последний раз редактировалось ACE Valery; 30.12.2011 в 18:55.
datgen вне форума Ответить с цитированием
Старый 30.12.2011, 11:50   #2
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Код:
// функция объединения двух строк а и б, результат складывается в с
// на вход подаются указатели на строки
void strcaty (char *a, char *b, char *c) //через индексацию
{
int i, j; 
for (i = 0; a[i]; i++) c[i] = a[i]; // копируем из а в с по индексу.
for (j = 0; b[j]; j++) c[i + j] = b[j]; // копируем из b в конец строки с (поэтому i+j)
c[i + j]=0; // поскольку строки нултерминированые пишем в конец 0 (хотя должно быть '\0') 
}

// тут делается тоже самое что и в первой функции только через указатели
void strcaty1 (char *a, char *b, char *c) //арифметика указателей
{
int i, j;
for (i = 0; *(a + i) ; i++) c[i] = *(a + i) ;// копируем из а в с по указателю *(a + i) то есть адрес первого элемента строки а + i 
for (j = 0; b[j]; j++) c[i + j] = *(b + j); // обратите внимание исправлено
c[i + j] = 0; // опять же нольв конец, строка нултерминированная
}
Вот так это работает.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ОБъясните программу Даша(S) Помощь студентам 3 22.10.2011 21:26
объясните программу Alishka1991 Общие вопросы по Java, Java SE, Kotlin 0 24.04.2011 09:41
объясните просто и понятно, как составить программу на BASIC mmarina80 Помощь студентам 5 03.01.2010 18:10
объясните эту программу по порядку C-Jay Общие вопросы C/C++ 1 03.01.2010 16:20
Объясните программу Принц Общие вопросы C/C++ 2 31.05.2008 10:26