我的c语言笔记---字符串

来源:互联网 发布:网络运营商选择 编辑:程序博客网 时间:2024/05/18 00:27

<A href="http://www.goodprogrammer.org/" target="blank">ios培训</A>------我的c语言笔记,期待与您交流!


字符串(1)

"hello world!" 

在所有的字符后面,有一个 '\0'的字符,成为尾零,代表字符串的末尾.


"h" 字符串由两个字符组成, 'h'  '\0'  两个字节.

'h'  以数字存储的,是4个字节.


1,当我们写"hello"时,就是告诉编译器,在只读数据段存储6个字符.

只读数据段,和栈空间很远.

2,"hello"表达式的值,表示字符串第一个字符的地址,也是'h'的地址.

当我们打印printf("%c",*"hello");  输出就是'h'


char * p = "hello world!";

p[0] 就是代表h.  但是p[0] = 'H' ;是错误的,因为 "hello world"是只读的不能修改,


例子:

char a[64] = "hello world!";

a[0] = 'H';则是正确的,因为原版的字符串还在只读数据区,而是复制了一份给了数组a[64].

在输出时,遇到'\0'就停止打印输出.

没初始化的是0.


"hello"

6字节长;

有效字节长是5,(因为不包括尾零). 

有个函数专门求有效字节长. strlen( );这个函数判断到第一个\0之前的字符串的长度.


字符串(2)

atoi( ) ;

int atoi(const char *str); //传入一个字符串的地址,返回一个整形

1,当碰到非法字符返回,

2,s碰到第二个'-'返回.


int strcmp(const char* s1,const char *s2)

传入两种字符串,如果s1>s2 返回正数,s1<s2,返回负数,相等返回0

先比较两个字符串的第一个字符的Ascll码,那个Ascll码大,哪个就是大.以此类推.


字符串(3)

strcpy(char *s1, const char* s2);

s1需有足够装下s2空间的。

char * p = "hello world";

char buf[64] = {};

char *q;

char *ret = strcpy(buf , p);//正确

strcpy(q,p);//错误,因为不确定,q指向的是哪里。

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


strcat( char * restrict s1, const char *restrict s2);  .//字符串的拼接

char buf [64] = "hello";

char *p = "world!";

strcat(buf,p);  //形成新的字符串,buf的空间足够大,能装下拼接后的字符串。


strstr(const char *p1,const char *p2) ;  //字符串查找。

char *q = "hello";

char *p = "world";

char *ret = strstr(p,q);

if(ret != null){

   printf("%s\n",ret); //返回第一个符合q字符串的q字符串的字符的地址。

}


字符串(4)

字符串分割

char *  strtok(char *restrict str,const char *restrict sep);

 第一个字符串是可变字符串。

char buf[] = "I am a so bad man.";

char *p = "I am a so bad man.";

char * ret = strtok(buf," ");//分隔符。

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

ret = strtok(NULL,“ "); //NULL,是继续分割的意思。

ret= strtok(p," ");//分割新的字符串。但是p不能分割,因为p是不可变。


实际效果是把分隔符,变成了\0,

char buf[] = "welcome to qianfeng";

char * p = buf;

while(1){

   p = strtok(p, " ");

//   p = strtok(p, ", ");

//   p = strtok(p, ", !");
char *q[5] = {};
int i = 0;

   if(!p)

      break;

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

   q[i++] = p;

   p = NULL;

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

{

     if(q[i]){

     printf("%d\n",q[i]);

    }

}


0 0