字符串函数与字符函数
Posted 两片空白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串函数与字符函数相关的知识,希望对你有一定的参考价值。
文章目录
一.字符串函数
1.strlen strcpy strcmp strcat函数
strlen函数
- 表现形式
返回值为无符号整形(unsigned int)最小值为0,参数为字符串起始地址。
- 作用
计算字符串中’\\0’前面字符的个数。
strcpy函数
- 表现形式
- 作用
将字符串source字符逐个拷贝到字符串destination中,包括’\\0’。
注意:字符串destination的空间一定要大于等于字符串source。返回为字符串destination修改后的首地址。
#include<stdio.h>
int main(){
char a[] = "asdSDSdf123";
char b[] = "4444";
char *p=strcpy(a, b);
printf("%s\\n", p);//返回a的首地址
printf("%s\\n", a);//并且a也会被改变
return 0;
输出:
strcmp函数
- 表现形式
返回值为int,参数为两个字符串首地址。
- 作用
用于字符串比较。
字符串str1大于str2时,返回值为1.
字符串str1等于str2时,返回值为0.
字符串str1小于str2时,返回值为-1.
注意:字符串比较方式两字符串逐个字符比较,哪个先出现字符大的,哪个字符串大。相等时返回0。
strcat函数
- 表现形式
- 作用
将字符串source字符逐个拼接到字符串destination后面,包括’\\0’。从字符串destination的’\\0’开始拼接。
注意:字符串destination的空间一定要足够大。返回为字符串destination修改后的首地址。
#include<stdio.h>
int main(){
char a[16] = "asdSDSd";
char b[] = "4444";
char *p=strcat(a, b);
printf("%s\\n", p);
printf("%s\\n", a);
return 0;
}
输出:
2.strncpy strncat strncmp函数
strncpy函数
- 表现形式
- 作用
将num个字符从字符串source拷贝到字符串destination中,如果字符串source元素个数小于num个,后面补0直到num个。
注意:strncpy函数后面不会添加字符’\\0’。
#include<stdio.h>
int main(){
char a[16]="asadasds";
char b[] = "4444";
char *p=strncpy(a, b,4);
printf("%s\\n", p);
printf("%s\\n", a);
return 0;
}
输出:
从上面可以发现a后面的字符也仍然在a里,说明strncpy函数后面不会添加字符’\\0’。
strncat函数
- 表现形式
- 作用
将num个字符从字符串source拼接到字符串destination后面,从字符串destination的’\\0’开始拼接。
注意:strncat函数后面会添加’\\0’字符。
strncmp函数
- 表现形式
- 作用
将两字符串中开始时的num个元素进行比较。返回值与strcpy相同。
3.strstr strtok函数
strstr
- 表现形式
- 作用
在str1中找到str2字符串第一次出现的位置,返回第一次出现时的开始地址。
#include<stdio.h>
int main(){
char a[]="this is a simple string";
char *p=strstr(a, "simple");
printf("%s\\n", p);
printf("%s\\n", a);
return 0;
}
输出:
上面代码发现,字符串a没变,输出为第一次出现simple的起始地址。
strtok函数
- 表现形式
- 作用
delimiters字符串是用作分隔符的字符的集合。字符串str任意的其中一个都替换为’\\0’。
strtok函数的第一个参数不为NULL,函数找到str第一个标记,并保持他在字符串中的位置。
strtok函数的第一个参数为NULL,函数将从str字符串被保存的位置开始,查找下一个标记。
如果字符串str不存在更多标记,则返回NULL指针。
#include<stdio.h>
int main(){
char a[]="this is.a@simple#string";
char *p=strtok(a, " .@#");
while (p){ //返回值为指针,不是*p
printf("%s\\n", p);
p=strtok(NULL, " .@#");//返回值为地址
}
return 0;
}
输出:
注意:strtok函数会使str发生变化,一般先将str拷贝,再进行切分。返回值为地址。注意如何使用strtok函数,见上面代码。如果多个分隔符在一起,只会将第一个设为‘\\0
二.字符函数
1.isspace isdigit islower isupper 函数
isspace | 判断是否是空白字符 |
---|---|
isdigit | 判断是否是十进制数字字符0~9 |
islower | 判断是否是小写字符a~z |
isupper | 判断是否是大写字符A~Z |
2.tolower toupper 函数
int tolower(int c) | 大写转小写 |
---|---|
int toupper(int c) | 小写转大写 |
注意:有返回值int
#include<stdio.h>
#include<ctype.h>
int main(){
char *a = "asdASDsbfcc";
char p ;
int i = 0;
while (a[i]){
if (islower(a[i])){
p = toupper(a[i]);
}
i++;
putchar(p);
}
return 0;
}
输出:
三.strstr的模拟实现
#include<stdio.h>
#include<assert.h>
char *Mystrstr(char *a, const char *b){
assert(a);
assert(b);
while (*a){
const char *p = b;
char *s = a;
while (*s == *p&&*p&&*s){
s++, p++;
}
if (*p == '\\0'){
return a;
}
a++;
}
return NULL;
}
int main(){
char *a = "this is a simple string";
char *p = Mystrstr(a,"simple");
printf("%s\\n", p);
return 0;
}
输出:
以上是关于字符串函数与字符函数的主要内容,如果未能解决你的问题,请参考以下文章