Знание Паскаля и основ алгоритмизации, страница 2

200

м

а

р

т

\0

\0

\0

\0

208

а

п

р

е

л

ь

\0

\0

216

м

а

й

\0

\0

\0

\0

\0

224

230

235

242

м

а

232

р

т

\0

а

п

р

е

л

240

ь

\0

м

а

й

\0

//подсчитать длину строки (массив символов)

#include<stdio.h>

void main(void){

      char s[]="abc";   int n=0;

while(s[n++]);

n--;

printf("n=%d\n",n);

}

//подсчитать длину строки (массив символов) через указатель

#include<stdio.h>

void main(void){

      char s[]="abc",*s1=s;   int n=0;

while(*s1++)

      n++;

printf("n=%d\n",n);

}

//подсчитать длину строки (указатель)

#include<stdio.h>

void main(void){

      char *s1="abc";   int n=0;

while(*s1++)

      n++;

s1-=(n+1);

printf("n=%d\n",n);

}

//к строке 1 присоединить строку 2 (массивы символов)

#include<string.h>

#include<stdio.h>

void main(void){

      char s1[80],s2[80];

      int i=0,j=0;

gets(s1);gets(s2);

while(s1[i]) i++;

while(s2[j])

      s1[i++]=s2[j++];

s2[i]=0;

puts(s1);

}

//сцепить 2 строки (указатели)

#include<string.h>

#include<stdio.h>

void main(void){

      char *s1="...",*s2="...",s[80];

      int i=0;

while(*s1)

      s[i++]=*s1++;

while(s[i++]=*s2,*s2++);

puts(s);

}


//дана строка

//создать подстроку длиной n>0, начиная от символа k>=0

#include<string.h>

#include<stdio.h>

void main(void){

      char str[80],substr[80];

      int k,n,i;

scanf("%d%d",&n,&k);

gets(str);

for(i=0;i<k;i++)

      if(!str[i]) break;

if(i<k) *substr=0;  //substr[0]=0;

else {

      for(i=0;i<n&&str[i+k];i++)

            substr[i]=str[i+k];

      substr[i]=0;

}

puts(substr);

}

//дана строка; внутри нее выделить подстроку

//длиной n>0, начиная от символа k>=0

#include<string.h>

#include<stdio.h>

void main(void){

      char str[80],*substr;

      int k,n,i;

scanf("%d%d",&n,&k);

gets(str);

for(i=0;i<k;i++)

      if(!str[i]) break;

substr=str+i;

if(i==k) {

      while(i<n+k&&str[i])

            i++;

      str[i]=0;

}

puts(substr);

}


/*

Дано предложение. Удалить из него лидирующие и

завершающие пробелы.

*/

#include<string.h>

#include<stdio.h>

void main(void){

            char s[80],*s2;

            int i=0;

      gets(s);

      while(s[i]==' ' && s[i]) i++;

      s2=s+i;

      if(s[i]){

            while(s[i++]);

            while(s[--i-1]==' ');

            s[i]=0;

      }

      puts(s2);

}

/*

Дано предложение. Создать новое предложение,

удалив из исходного лишние пробелы.

*/

#include<string.h>

#include<stdio.h>

void main(void){

            char s[80],s2[80];

            int i=0,j=0;

      gets(s);

      while(s[i]){

            while(s[i]==' ') i++;

            while(s[i]!=' ' && s[i])

                  s2[j++]=s[i++];

            if(s[i])

                  s2[j++]=' ';

      }

      if(j)

            if(s2[--j]==' ')

                  j--;

      s2[j]=0;

      puts(s2);

}

/*

Дано предложение. Занести его слова в массив строк.

*/

#include<string.h>

#include<stdio.h>

void main(void){

            char s[80]="      ",w[20][80];

            int i=0,j,k=0;

      while(s[i]){

            while(s[i]==' ') i++;

            if(!s[i])

                  break;

            for(j=0;s[i]!=' ' && s[i];w[k][j++]=s[i++]);

            w[k++][j]=0;

      }

}

/*

Дано предложение. Представить его слова с

помощью массива указателей.

*/

#include<string.h>

#include<stdio.h>

void main(void){

            char s[80]="    fd fdddd  ",*wp[20];

            int i=0,k=0;

      while(s[i]){

            while(s[i]==' ') i++;

            if(!s[i])

                  break;

            for(wp[k++]=s+i;s[i]!=' ' && s[i];i++);

            if(s[i])s[i++]=0;

      }

}

/* #3 */

//плохая реализация удаления лишних пробелов и пунктуации

#include <string.h>

#include <stdio.h>

char *Delete(char *s1, char *s2) {

            int n;

      while((n=strcspn(s1,s2))!=strlen(s1))

            strcpy(s1+n,s1+n+1);

      return s1;

}

void main(void)

{

      char s[81]="gf .  f.,   df", *del = "\t,. ";

      puts(Delete(s,del));

}


Библиотека <string.h>, пункт 9.4, стр. 139.

Отличие?

char s[120];

gets(s);

char *s;

gets(s);

char c,*q;        //что это значит?

c = "ABCD"[3];

q = "12345" + 2;

for (с=0, q = "xxxxxxxx"; *q++ != 0; c++);

char s1[120], s2[120], s3[120], *p;

int len;

gets(s1);                     //s1: |a|b|c|\0|       

len=strlen(s1);

strcpy(s2,s1);                //s2: |a|b|c|\0|       

gets(s3);                     //s3: |u|v|\0|         

strcat(s2,s3);                //s2: |a|b|c|u|v|\0|   

strncpy(s3,s2,4);             //s3: |a|b|c|u|?|?|    

*s3[4]=0;                     //s3: |a|b|c|u|\0|     

len=strlen(s3);

strncat(s3,s1,2);             //s3: |a|b|c|u|a|b|?|?|

s3[len+2]=0;                  //s3: |a|b|c|u|a|b|\0| 

if((p=strchr(s3,'b'))!=NULL) {...}        //pºs3+1

if((p=strstr(s3,"def"))==NULL) {...}      //pºNULL

if(!strcmp(s1,"abc")) {...}               //true

if(strcmp(s1+1,s2)<=0) {...}              //false

/* Создать массив слов из строк, вводимых с клавиатуры.

Окончание ввода – пустая строка. Вывести массив на stdout. */

#include <stdio.h>

#define MAXSTRINGS 20

void main(void) {

      char w[MAXSTRINGS][120];

      int k=0,i;

ptintf("Input strings (<=%d). Empty string to finish input\n", MAXSTRINGS);

while(*gets(s[k]){

      if(k==MAXSTRINGS)

            break;

      k++;

}

if(!k) puts("Array is empty");

else {

      puts("Input array");

      for(i=0;i<k;puts(s[i++]);

}

}

/* Из слов, вводимых с клавиатуры, создать восклицательное предложение.

Окончание ввода – пустая строка. */

#include <string.h>

#include <stdio.h>

void main(void) {

      char w[120], s[120]="";

      while(*gets(w)) {

            strcat(s,w);

            strcat(s," ");

// одним оператором     strcat(strcat(s,w)," ");

      }

      if(*s2)

            *(s2+strlen(s2)-1)='!';

      puts(s2);

}


/* Дано предложение. Занести его слова в массив строк. */

#include<string.h>                              //массив указателей

#include<stdio.h>

void main(void){

            char s[120], w[60][120], //*w[60]

                  *p, d[]=" \t.,:;!?-";

            int k=0,i=0;

      p=strtok(gets(s),d);    //показать состояние памяти

      while(p!=NULL){

            strcpy(w[k++],p);       //w[k++]=p;

            p=strtok(NULL,d);

      }

      while(i<k)

            puts(w[i++]);

}