字符串专题

字符串

字符与字符串的区别在于字符串的末尾是\0’

Printf()函数默认以C风格输出

 

string  是只读属性

拷贝复制模型

Void(char*from, char *to)//++的优先级比×

{

While(*from++ = *to++) &&!= \0’ )

{


}

}


语法越界【错误模型】

Charbuf [ 3 ] = “abc”;


不断修改指针变量的值【错误模型】

Char*getKeyByValude(char **keyvaluebuf,char *keybuf)

{

Inti = 0;

Char*a= (char*)malloc(50);

Printf(“%x”,a); //打印a的地址

For( ; **keyvaluebuf != ‘\0’ )

{

*a++= *(*keyvaluebuf)++; //不断改变a所指向的内存首地址指向的内存的值,此时的a已经不是原先的那个a了,而是下移到后面去了

}

Free(a);   //真实释放的不是原先的那个a,而是后来下移的那个a,程序会当机。

}

解决方案

//可以定义一个辅助指针变量char*a1; a1 = a;


Strstr(源字符串,”需要查找的字符串)

返回的是一个地址,需要查找的字符串第一次出现的地址,要使用指针接收该地址

Strchr(源字符串,需要查找的字符)注意与strstr的相同指出与区别


从源字符串中寻找制定字符串的框架


Intcount = 0;

Char*sub = “abcd”;

Char*p = “abc111abc22222abcqqqq”;

Char*p2 =NULL; //辅助指针

Do

{

P= strstr(p , sub)

If(p !=NULL )

{

Count++;

P= p + strlen(sub);

}

Else

{

Break;

}

}while(*p != ‘\0’);

Printf(“count: %d \n”,count);



函数库中字符串函数原型

Void*memcpy(void *, const void *,size_t);

Int mencmp(const void *,const void *,size_t);

Void*memset(void *,int ,size_t);

Char*_strset(char *,int);

Char*strcpy(char *p1,const char *p3);

Char*strcat(char *,const char *);

Intstrcmp(const char *,const char *);

Size_tstrlen(const char *);


两头堵模型


inttrimSpace(char *inbuf,char *outbuf)

{

char*p

inti;

intj;

intcount;

count= 0;

i= 0;

j= strlen(inbuf)-1;

p= inbuf;

while(isspace(p[i]) && p[i] != '0')

{

i++;

}

while(isspace(p[j]) && p[j] != '0')

{

j--;

}

printf("%c\n",p[i]);

printf("%c\n",p[j]);

memcpy(outbuf,p+i,j-i+1);

outbuf[j-i+1]= '\0';

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

return0;

}



字符串反置模型

voidstring_trun(char *abc, char *cba)

{

char*p;

chartem;

intlen;

inti;

i= 0;

len= strlen(abc)-1;

p = abc;

while(len>i)

{

tem= p[i];

p[i]= p[len];

p[len]= tem;

i++;

len--;

}

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

memcpy(cba,p,strlen(p));

cba[strlen(p)-2]= '\0';

}

特别说明: char*p定义的是一个指针

Chara[ ] = “sssssss”定义的是一个数组

      P=a  p指向数组a的 首地址


你可能感兴趣的:(c++编程,c编程,指针)