分享

字符串与字符数组

 联通手机用户 2017-12-03


1.1 字符数组定义

char array[100];

 

1.2 字符数组初始化

char array[100] = {'a', 'b', 'c','d'};

char array[100] = 'abcd';

char array[100] = { 0 };

char array[] = 'abcd';

 

1.3 字符数组使用

 

1.4 随机数产生函数randsrand

头文件stdlib.h

Rand是伪随机数产生器,每次调用rand产生的随机数是一样的

如果调用rand之前先调用srand就出现任意的随机数

只要能保证每次调用srand函数的时候,参数的值是不同的,那么rand函数就一定会产生不同的随机数

#include 

int t = (int)time(NULL);

srand(t);

for (int i = 0; i <>10; i++)

{

  printf('%d\n', rand());

}


 

 

1.5 scanf输入字符串

 char s[10] = { 0 };

 scanf('%s', s);//'%s'的作用就是输入一个字符串的,scanf是以回车键作为输入完成标示的,但回车键本身并不会作为字符串的一部分

 //如果scanf参数中的数组长度小于用户在键盘输入的长度,那么scanf就会缓冲区溢出,导致程序崩溃

 int i;

 for (i = 0; i <>10; i++)

 {

   printf('%d\n', s[i]);

 }

 printf('----------------------------------\n');

 printf('%s\n', s);

 return 0;

 

1.6 字符串的结束标志

Scanf将回车,空格都认为是字符串输入结束标志,

1.7 字符串处理函数

1.7.1 gets

 char s[100] = { 0 };

 gets(s);//gets认为回车的输入结束标示,空格不是输入结束标示,所以用gets这个函数就可以实现输入带空格的字符串

 //getsscanf一样存在缓冲区溢出的问题

 

 int i;

 for (i = 0; i <>10; i++)

 {

   printf('%d\n', s[i]);

 }

 printf('----------------------------------\n');

 printf('%s\n', s);

 

Gets不能用类似“%s或者%d”之类的字符转义,只能接受字符串的输入

1.7.2 fgets函数

gets函数不检查预留缓冲区是否能够容纳用户实际输入的数据。多出来的字符会导致内存溢出,fgets函数改进了这个问题。

由于fgets函数是为读取文件设计的,所以读取键盘时没有gets那么方便

 char s[100] = { 0 };

 fgets(s, sizeof(s), stdin);

 

1.7.3 puts函数

puts函数打印字符串,与printf不同,puts会在最后自动添加一个\n

 char s[] = 'hello world';

 puts(s);

 

1.7.4 fputs函数

fputs是puts的文件操作版本,

 char s[] = 'hello world';

 fputs(s, stdout);

1.7.5 strlen,字符串长度

size_t  strlen(const char * _Str);

返回不包含字符串结尾\0的字符串长度

 char s[100] = 'hello world';

 int len = strlen(s);//得到字符串长度,返回一个字符串中有效字符的数量(不包含字符串结尾的0

 printf('len = %d\n', len);

 return 0;

 

1.7.6 strcat,字符串追加

size_t  strcat(char * _Str1, const char * _Str2);

将参数_Str2追加到_Str1后尾

 char s[1024] = 'hello world';

 int len = strlen(s);//得到字符串长度,返回一个字符串中有效字符的数量(不包含字符串结尾的0

 printf('len = %d\n', len);

 char s1[100] = 'abc123456789';

 strcat(s, s1);//将两个字符串合并,结果放入第一个参数里面,strcat也存在缓冲区溢出的问题

 printf('%s\n', s);

 

1.7.7 strncat,字符串有限追加

size_t  strncat(char * _Str1, const char * _Str2, size_t len);

 

1.7.8 strcmp,字符串比较

int strcmp(const char * _Str1, const char * _Str2);

比较两个字符串是否相等,相等返回0,不等返回非0

1.7.9 strncmp,字符串有限比较

 

1.7.10 strcpy字符串拷贝

char *strcpy(char * _Str1, const char * _Str2);

将参数_Str2拷贝到参数_Str1

1.7.11 strncpy字符串有限拷贝

 

1.7.12 sprintf,格式化字符串

printf函数功能类似,printf函数将格式化结果输出到屏幕,sprintf将格式化结果输出到字符串

1.7.13 Sscanf函数

Sscanf类似于scanf函数,scanf从键盘读取用户输入,scanf从指定格式化字符串读取输入

 

1.7.14 strchr查找字符

char * strchr(char * _Str, int _Ch)

在参数_str中查找参数_Ch指定字符,找到返回字符_Ch_Str中所在位置,没有找到返回NULL;

1.7.15 strstr查找子串

char * strstr(char * _Str, const char * _SubStr)

在参数_str中查找参数_SubStr指定子串,找到返回子串在_Str中所在位置,没有找到返回NULL;

 

1.7.16 strtok分割字符串

字符在第一次调用时strtok()必需给予参数s字符串,往后的调用则将参数s设置成NULL每次调用成功则返回指向被分割出片段的指针

 char buf[] = 'abc@defg@igk';

 char *p = strtok(buf, '@');

 while (p)

 {

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

   p = strtok(NULL, '@');

 }

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多