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++]);
}
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.