1

Тема: Поясніть будь ласка

Є программа -

1.

{
    system("chcp 1251");
    printf("Речення:  \n");
    char a[101] = "мдя ежс кек т з ок ес ";

    printf("Речення без першого словосполучення ЕЖС : \n");
    // gets(a);
    if(p1(a, "ежс"))
        printf("Входжень буквосполучень 'ЕЖС' не знайдено ");

    printf("%s\n ", a);

    printf("Речення із заміненим буквосполученням Т на ДЮЕ : \n");
    //gets(b);
    if(p2(a, "т", "дюе"))
        printf("Входжень буквосполучень Т не знайдено ");

    printf("%s\n", a);

    printf("Скопійовані 6 символи з рядка S після першої З в рядок X : \n");
    if(p3(a, "з", x))
        printf("Входжень букви ч не знайдено ");
    printf("%s\n ",x);


    if(p4(a, "ес", "їжє"))
        printf("В реченні немає буквосполучення 'ес'.");
    else
        printf("\nРечення з заміненими 'ес' на 'їжє': %s", a);
    return 0;
}


2.

int strdel(char *str, int z, int k) {
    if(z < 0) return -1;
    if(k < 0) return -2;
    int len = strlen(str);
    int m = z + k;
    if(z < len) {
        if(m >= len)
            str[z] = 0;
        else
            strcpy(str + z, str + m);
    }
    return 0;
}
int strins(char *s1, const char *s2, int n) {
    int len1 = strlen(s1);
    if(n > len1 || n < 0)
        return -1;
    int len2 = strlen(s2);
    int i;
    for(i = len1; i >= n; i--)
        s1[i + len2] = s1[i];
    strncpy(s1 + n, s2, len2);

3.

int strdel(char *str, int z, int k);
int strins(char *s1, const char *s2, int n);
int p3(char *c, const char *d, char *x);
int p4(char *S, const char *ed, const char *sh);

4.

int p1(char *a, const char *b) {
    char *p = strstr(a, b);
    if(p == 0)
        return 1;
    else {
        strdel(p, 0, 3);
        return 0;
    }
}
int p2(char *b, const char *n, const char *q) {
    char *m = strstr(b, n);
    if(m == 0)
        return 1;
    else {
        strdel(m, 0, strlen(n));
        strins(m, q, 0);
        return 0;
    }
}
int p3(char *c, const char *d, char *x) {
    char *ch = strstr(c, d);
    if(ch == 0)
        return 1;
    else {
        strncpy(x, ch + 1, 6);
        x[6] = 0;
        return 0;

5.

#ifndef PUNKT_H_INCLUDED
#define PUNKT_H_INCLUDED

int p1(char *a, const char *b);
int p2(char *b, const char *n, const char *q);

#endif // PUNKT_H_INCLUDED
Оригінал
1.

{
     system("chcp 1251");
 printf("Речення:  \n");
    char a[101]="мдя ежс кек т з ок ес ";

 printf("Речення без першого словосполучення ЕЖС : \n");
// gets(a);
 if (p1(a,"ежс")) printf("Входжень буквосполучень 'ЕЖС' не знайдено ");

 printf("%s\n ",a);

 printf("Речення із заміненим буквосполученням Т на ДЮЕ : \n");
 //gets(b);
 if (p2(a,"т","дюе"))  printf("Входжень буквосполучень Т не знайдено ");

printf("%s\n",a);

printf("Скопійовані 6 символи з рядка S після першої З в рядок X : \n");
if(p3(a,"з",x)) printf("Входжень букви ч не знайдено ");
 printf("%s\n ",x);


if(p4(a,"ес","їжє"))
        printf("В реченні немає буквосполучення 'ес'.");
    else
        printf("\nРечення з заміненими 'ес' на 'їжє': %s",a);
    return 0;
}


2.

int strdel(char*str,int z,int k){
if(z<0)
    return -1;
if(k<0)
    return -2;
int len=strlen(str);
int m=z+k;
if(z<len)
{
    if(m>=len)
        str[z]=0;
        else
        strcpy(str+z,str+m);
}
return 0;
}
int strins(char *s1,const char*s2,int n)
 {
int len1=strlen(s1);
 if(n>len1 || n<0)
 return -1;
 int len2=strlen(s2);
 int i;
  for(i=len1; i>=n; i--)
 s1[i+len2]=s1[i];
 strncpy(s1+n,s2,len2);

3.

int strdel(char*str,int z,int k);
int strins(char *s1,const char *s2,int n);
int p3(char *c,const char *d,char *x);
int p4(char *S,const char *ed,const char *sh);

4.

int p1(char *a,const char *b){
char *p=strstr(a,b);
if (p==0)
  return 1;
  else{
  strdel(p,0,3);
  return 0;
  }
}
int p2(char *b, const char *n,const char *q){
    char *m=strstr(b,n);
 if (m==0)
    return 1;
 else{
     strdel(m,0,strlen(n));
     strins(m,q,0);
 return 0;
 }
}
int p3(char *c,const char *d,char *x){
char *ch=strstr(c,d);
if (ch==0)
    return 1;
else {
    strncpy(x,ch+1,6);
x[6]=0;
    return 0;

5.

#ifndef PUNKT_H_INCLUDED
#define PUNKT_H_INCLUDED

int p1(char *a,const char *b);
int p2(char *b, const char *n,const char *q);

#endif // PUNKT_H_INCLUDED

Завдання-

1.Реалізувати вказану у Вашому варіанті функцію.

2. В функції main() використати цю функцію при обчисленні вказаного у Вашому варіанті виразу.

3. Функція має бути визначеною після функції main().

Поясніть що роблять ці строки-

1.

strncpy(s1+n,s2,len2)

і що таке strncpy

2.

#ifndef DELINS_H_INCLUDED
#define DELINS_H_INCLUDED
#endif //DELINS_H_INCLUDED

3.

 strins(m,q,0);

що це робить?

Дякую

2

Re: Поясніть будь ласка

1. http://www.cplusplus.com/reference/cstring/strncpy/
2. https://en.wikipedia.org/wiki/Include_guard
3. Див. в рядках 51-60.

3

Re: Поясніть будь ласка

darsteba написав:
Є программа -
1.

{
     system("chcp 1251");
 printf("Речення:  \n");
    char a[101]="мдя ежс кек т з ок ес ";

 printf("Речення без першого словосполучення ЕЖС : \n");
// gets(a);
 if (p1(a,"ежс")) printf("Входжень буквосполучень 'ЕЖС' не знайдено ");

 printf("%s\n ",a);

 printf("Речення із заміненим буквосполученням Т на ДЮЕ : \n");
 //gets(b);
 if (p2(a,"т","дюе"))  printf("Входжень буквосполучень Т не знайдено ");

printf("%s\n",a);

printf("Скопійовані 6 символи з рядка S після першої З в рядок X : \n");
if(p3(a,"з",x)) printf("Входжень букви ч не знайдено ");
 printf("%s\n ",x);


if(p4(a,"ес","їжє"))
        printf("В реченні немає буквосполучення 'ес'.");
    else
        printf("\nРечення з заміненими 'ес' на 'їжє': %s",a);
    return 0;
}


2.

int strdel(char*str,int z,int k){
if(z<0)
    return -1;
if(k<0)
    return -2;
int len=strlen(str);
int m=z+k;
if(z<len)
{
    if(m>=len)
        str[z]=0;
        else
        strcpy(str+z,str+m);
}
return 0;
}
int strins(char *s1,const char*s2,int n)
 {
int len1=strlen(s1);
 if(n>len1 || n<0)
 return -1;
 int len2=strlen(s2);
 int i;
  for(i=len1; i>=n; i--)
 s1[i+len2]=s1[i];
 strncpy(s1+n,s2,len2);

3.

int strdel(char*str,int z,int k);
int strins(char *s1,const char *s2,int n);
int p3(char *c,const char *d,char *x);
int p4(char *S,const char *ed,const char *sh);

4.

int p1(char *a,const char *b){
char *p=strstr(a,b);
if (p==0)
  return 1;
  else{
  strdel(p,0,3);
  return 0;
  }
}
int p2(char *b, const char *n,const char *q){
    char *m=strstr(b,n);
 if (m==0)
    return 1;
 else{
     strdel(m,0,strlen(n));
     strins(m,q,0);
 return 0;
 }
}
int p3(char *c,const char *d,char *x){
char *ch=strstr(c,d);
if (ch==0)
    return 1;
else {
    strncpy(x,ch+1,6);
x[6]=0;
    return 0;

5.

#ifndef PUNKT_H_INCLUDED
#define PUNKT_H_INCLUDED

int p1(char *a,const char *b);
int p2(char *b, const char *n,const char *q);

#endif // PUNKT_H_INCLUDED

Змушуєте мене ненавидіти вас. Виправив відступи.

Подякували: FakiNyan1

4

Re: Поясніть будь ласка

leofun01 написав:
darsteba написав:
Є программа -
1.

{
     system("chcp 1251");
 printf("Речення:  \n");
    char a[101]="мдя ежс кек т з ок ес ";

 printf("Речення без першого словосполучення ЕЖС : \n");
// gets(a);
 if (p1(a,"ежс")) printf("Входжень буквосполучень 'ЕЖС' не знайдено ");

 printf("%s\n ",a);

 printf("Речення із заміненим буквосполученням Т на ДЮЕ : \n");
 //gets(b);
 if (p2(a,"т","дюе"))  printf("Входжень буквосполучень Т не знайдено ");

printf("%s\n",a);

printf("Скопійовані 6 символи з рядка S після першої З в рядок X : \n");
if(p3(a,"з",x)) printf("Входжень букви ч не знайдено ");
 printf("%s\n ",x);


if(p4(a,"ес","їжє"))
        printf("В реченні немає буквосполучення 'ес'.");
    else
        printf("\nРечення з заміненими 'ес' на 'їжє': %s",a);
    return 0;
}


2.

int strdel(char*str,int z,int k){
if(z<0)
    return -1;
if(k<0)
    return -2;
int len=strlen(str);
int m=z+k;
if(z<len)
{
    if(m>=len)
        str[z]=0;
        else
        strcpy(str+z,str+m);
}
return 0;
}
int strins(char *s1,const char*s2,int n)
 {
int len1=strlen(s1);
 if(n>len1 || n<0)
 return -1;
 int len2=strlen(s2);
 int i;
  for(i=len1; i>=n; i--)
 s1[i+len2]=s1[i];
 strncpy(s1+n,s2,len2);

3.

int strdel(char*str,int z,int k);
int strins(char *s1,const char *s2,int n);
int p3(char *c,const char *d,char *x);
int p4(char *S,const char *ed,const char *sh);

4.

int p1(char *a,const char *b){
char *p=strstr(a,b);
if (p==0)
  return 1;
  else{
  strdel(p,0,3);
  return 0;
  }
}
int p2(char *b, const char *n,const char *q){
    char *m=strstr(b,n);
 if (m==0)
    return 1;
 else{
     strdel(m,0,strlen(n));
     strins(m,q,0);
 return 0;
 }
}
int p3(char *c,const char *d,char *x){
char *ch=strstr(c,d);
if (ch==0)
    return 1;
else {
    strncpy(x,ch+1,6);
x[6]=0;
    return 0;

5.

#ifndef PUNKT_H_INCLUDED
#define PUNKT_H_INCLUDED

int p1(char *a,const char *b);
int p2(char *b, const char *n,const char *q);

#endif // PUNKT_H_INCLUDED

Змушуєте мене ненавидіти вас. Виправив відступи.

Вибачаюсь за помилки,дякую