首先C语言中并没有字符串这个基础数据类型。但是字符串在c语言中的涉及却是十分的广泛,并且也是十分重要的。
由双引号" "引起来的内存中的一串字符且以’\0’为结束标志符 的字符。
从字符串的内存首地址开始直到第一个’\0’结束统计字符的个数(不包括’\0’).
首先sizeof是求得变量、数组、指针、数据所占内存的字节数量,它是一个运算符不是函数,而strlen()是求字符串长度,即字符个数,它是c语言标准函数。如果想详细了解sizeof,可以看我前面所发的博客。
size_t strlen(const char *s){
assert(s != NULL); //断言函数,断言传进来的地址不为空
size_t cnt=0;
while(*s++ != '\0'){
cnt++;
}
return cnt;
}
把src所指的内容拷贝到*dest中,字符串结束标志’\0’也一起拷贝(如果dest的字符串比src的长并不完全覆盖dest的内容);
char *strcpy(char *dest,const char *src){
assert(dest!=NULL && src !=NULL);
int i = 0;
for(i=0;src[i] != '\0';i++){
dest[i] = src[i];
}
dest[i] = '\0';
return dest;
}
或者
char *strcpy(char *dest,const char *src){
assert(dest!=NULL&&src !=NULL);
char *pdest = dest;
while(*dest++ = *src++ != '\0');
return pdest;
}
把src的前n个字符拷贝到dest中(包括结束标志位’\0’),字符串不能重叠,目标字符串dest必须足够大以接收副本。
char *strncpy(char *dest,const char *src,size_t n){
assert(dest!=NULL&&src!=NULL);
size_t i = 0;
for(;i<n;i++){
dest[i] = src[i];
if(src[i] = '\0'){
break;
}
}
return dest;
}
或者
char *strncpy(char *dest,const char *src,size_t n){
assert(dest!=NULL&&src!=NULL);
char *pdest = dest;
while(n-->0&&(*dest++=*src++)!='\0');
return pdest;
}
strcat()函数实现把字符串src追加到dest字符串,覆盖dest字符串最后的结束标志位‘\0’,在最终的字符串最后加上结束标志位’\0’;字符串不能重叠,目标字符串dest必须足够大以接收副本。
char *strcat(char *dest,const char *src){
assert(dest!=NULL&&src!=NULL);
size_t i;
size_t len = strlen(dest);
for(i=0;src[i]!='\0';i++){
dest[len+i] = src[i];
}
dest[len+i] = '\0';
return dest;
}
或者
char *strcat(char *dest,const char *src){
assert(dest!=NULL&&src!=NULL);
char *pdest = dest;
while(*dest != '\0'){
dest++;
}
while(*dest++ = *src++ != '\0');
return pdest;
}
strncat()函数实现把字符串src的前n个字符追加到dest字符串,覆盖dest字符串最后的结束标志位‘\0’,在最终的字符串最后加上结束标志位’\0’;字符串不能重叠,目标字符串dest必须足够大以接收副本。
char *strncat(char *dest,const char *src,size_t n){
assert(dest != NULL && src != NULL);
size_t len = strlen(dest);
size_t i;
for(i=0;i<n && src[i] != '\0';i++){
dest[len+i] = src[i];
}
dest[len+i] = '\0';
return dest;
}
或者
char *strncat(char *dest,const char *src,size_t n){
assert(dest !=NULL&&src!=NULL);
char *pdest = dest;
while(*dest != '\0'){
dest++;
}
while(n-->0&&(*dest++ = *src++)!= '\0');
*dest = '\0';
returm pdest;
}
strcmp()函数比较两个字符串s1和s2的大小,返回 >0(s1>s2)或者=0(s1==s2)或者<0(s1 strncmp()的功能strcmp()大致相同,只不过strncmp()只比较前n个字符的大小; 输入一串字符串转换为整数并输出。代码实现
int strcmp(const char *s1,const char *s2){
assert(s1!=NULL&&s2!=NULL);
while(*s1 != '\0'&&*s2 != '\0'&&*s1 == *s2){
++s1;
++s2;
}
return *s1-*s2;
}
7.int strncmp(const char *s1,const char *s2,size_t n)
功能
代码实现
int strncmp(const char *s1,const char *s2,size_t n){
assert(s1!=NULL&&s2!=NULL);
while(n>0 && *s1!='\0' && *s2!='\0' && *s1==*s2){
s1++;
s2++;
n--;
}
return *s1-*s2;
}
8. int atoi(const char *nptr)
功能
代码实现
int atoi(const char *nptr){
assert(nptr!=NULL);
int flag = 1 //判断是否为负数
if(*nptr ==' -'){
flag = -1;
nptr++;
}else if(*nptr == '+'){
flag = 1;
nptr++;
}
int num = 0;
while(*nptr!='\0'){
num = num*10+(*nptr-'0');
nptr++;
}
return num*flag;
}