028-86922220

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

C语言字符串+字符串函数-创新互联

字符串 字符串

字符数组
char word[] = {‘H’, ‘e’, ‘l’, ‘l’, ‘o’,‘!’};
字符串

成都网站设计、做网站、成都外贸网站建设公司服务团队是一支充满着热情的团队,执着、敏锐、追求更好,是创新互联的标准与要求,同时竭诚为客户提供服务是我们的理念。创新互联建站把每个网站当做一个产品来开发,精雕细琢,追求一名工匠心中的细致,我们更用心!
char word[] = {‘H’, ‘e’, ‘l’, ‘l’, ‘o’,‘!’,’ \0’};

字符串变量

char *str = “Hello”; 
char word[] = “Hello”; 
char line[10] = “Hello”;
字符串常量
char* s = "Hello, world!";
字符串的输入和输出

字符串赋值?

char string[8]; 
scanf(“%s”, string); 
printf(“%s”, string);

scanf读⼊⼀个单词(到空格、tab或回⻋为⽌)
scanf是不安全的,因为不知道要读⼊的内容的⻓度
安全的输⼊
char string[8];
scanf(“%7s”, string);
在%和s之间的数字表⽰最多允许读⼊的字符的数量,这个数字应该⽐数组的⼤⼩⼩⼀
下⼀次scanf从哪⾥开始?
下一次scanf从上一个第八个开始
常⻅错误

这是⼀个空的字符串,buffer[0] == ‘\0’

char buffer[] = “”;
这个数组的⻓度只有1!

字符串数组
• char **a 
• a是⼀个指针,指向另⼀个指针,那个指针指向⼀个字符(串) 
• char a[][] 
• a是⼀个⼆维数组,第⼆个维度的⼤⼩不知道,不能编译 
• char a[][10] 
• a是⼀个⼆维数组,a[x]是⼀个char[10] 
• char *a[] 
• a是⼀个⼀维数组,a[x]是⼀个char*

程序参数

字符串函数 单字符输入输出,用putchar和getchar

putchar

getchar

标准库中的字符串函数string.h

strlen
size_t strlen(const char * s);
返回s的字符串⻓度(不包括结尾的0)

char line[]="Hello"
printf("strlen=%lu\n",strlen(line));
printf("sizeof=%lu\n",sizeof(line));
输出结果为:
strlen=5
sizeof=6

strcmp —compare

int mycmp(const char *s1,const char *s2)
{
	int idx = 0;
	while (s1[idx] == s2[idx] && s1[idx] != 0)
	{
		idx++;
	}return s1[idx] - s2[idx];
}
等同于
int mycmp(const char *s1,const char *s2)
{
	while (*s1==*s2&&*s1!='\0')
	{
		s1++; s2++;
	}
	return *s1 - *s2;
}

strcpy —copy

char * strcpy(char *restrict dst, const char *restrict src);
char *dst = (char*)malloc(strlen(src)+1);   //+1包括结尾最后的\0
strcpy(dst, src);

用函数等价

数组版本
char* mycpy(char*dst,const char* src)
{
int idx = 0;
while(src[idx]){
dst[idx]=src[idx];
idx++;
}
dst[idx]='\0';
return dst;
}
指针版本
char* mycpy(char*dst,const char* src)
{
char *ret=dst;
while( *dst++ = *src++ )
   ;
   *dst='\0';
   return ret;
}

strcat

char * strcat(char *restrict s1, const char *restrict s2);
char *mycat(char cat1[],const char cat2[]) //声明并实现我的猫字符指针函数。
{     int i = 0;     
       int j = strlen(cat1);         //猫1字符数组的最后一位下标j     while(i != strlen(cat2)){           //当猫2的下标为最后一位\0时跳出循环         cat1[j] = cat2[i];            //猫1最后一位为猫二的第一位字符       
         i++;       
         j++;     
    }     
    cat1[j] = '\0';           //猫1字符数组最后一位为0    
     return cat1;    //让我的猫字符指针指向猫1字符数组
}       

安全问题
strcpy和strcat都可能出现安全问题:如果那个dst或者要连接的地方没有足够的空间,不知道是否越界
安全版本

char * strncpy(char *restrict dst, const char *restrict src, size_t n);
char * strncat(char *restrict s1, const char *restrict s2, size_t n);
int strncmp(const char *s1, const char *s2, size_t n);

在名字中间和参数表中多了一个n
n的意思是说你能拷过去多少个字符;多了的部分直接掐掉,不会越界。
对于cmp来说是比较前n个的大小

strchr
在参数 str 所指向的字符串中搜索第一次出现字符 c(一个无符号字符)的位置。

#include#includeint main ()
{
   const char str[] = "http://www.nowcoder.com";
   const char ch = '.';
   char *ret;
   ret = strchr(str, ch);
   printf("|%c| 之后的字符串是 - |%s|\n", ch, ret);
   return(0);
}
运行结果为
|.| 之后的字符串是 - |.nowcoder.com|

strrchr
在参数 str 所指向的字符串中搜索最后一次出现字符 c(一个无符号字符)的位置。

#include#includeint main ()
{
   int len;
   const char str[] = "https://www.nowcoder.com";
   const char ch = '.';
   char *ret;
   ret = strrchr(str, ch);
   printf("|%c| 之后的字符串是 - |%s|\n", ch, ret);
   return(0);
}
运行结果为
|.| 之后的字符串是 - |.com|

strstr()
在字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 ‘\0’。
下面是 strstr() 函数的声明。
char*strstr(constchar*haystack,constchar*needle)

#include

#include

intmain()

{
constcharhaystack[20] = "NOWCODERABCD";    constcharneedle[10] = “CODER”;
char *ret;
ret = strstr(haystack, needle);
printf("子字符串是: %s\n", ret);return(0);}`
输出结果为
子字符串是: CODERABCD

memcpy

和strcpy类似,只不过它是拷贝字节

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


本文名称:C语言字符串+字符串函数-创新互联
文章转载:http://www.tsicrk.com/article/djceip.html

其他资讯

让你的专属顾问为你服务

1.6478s