关于字符串的库函数有许多,strlen(s):求s长度 ; strcpy(t,s)将s内容复制到t中 ;strncpy(t,s,n)将s中前n个字符拷贝到t中,是strcpy()的扩展,
常用的用法为
strncpy(t,s,sizeof(t)-1);
t[sizeof(t)-1]='\0';
char *strchr(char *str,char ch);在str中查找字符ch,如果有则返回ch在str中位置的指针,否则返回NULL;
char *strstr(char *str1,char *str2);在str1中查找str2(str2在str1中),如果找到则返回str2在str1中的地址,否则返回NULL;
int strcmp(char *str1,char str2);按ASCLL值比较str1与str2,如果相等则返回0,如果str1与str2第一个不相等的值,str1>str2,则返回大于0的数(不一定为1),否者返回小于0的数(不一定为-1,切记)。当比较到其中一个完时,则字符个数大为优,以此类推。
char *strcat(char *str1,const char *str2);将str2的内容插入到str1的末尾,并添加串结束标志‘\0’;
说明:1,str1 与 str2 所指向的不能为同一地址2、str1有足够的空间储存str2.
另外再说一下常量指针跟指针常量的区别,两者的定义分别如下:
int a;
常量指针:const int *p=&a;
指针常量:int const *p=&a;
常量指针是强调指针,它所指向的内容可以为常量,也可以为变量,但均不可通过该指针改变,但可以通过其他途径改变它所指向的内容。注意常量指针可以指向变量,但普通的指针不可以指向常量。
指针常量侧重常量,即指针是常量,不可改变指针本身的值。但对所指向的内容没有限制,可以为常量也可以为变量,可以改变,也可以不改。
另外还有指向常量的指针常量:
const int a;
const int * const p=&a;
这时,p为指针常量,且其所指向的内容为常量,两者都不能改。
下面是我自己写的字符串插入函数,代码如下:
//在s中的poi位置插入字符串t
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define Max 20
int Insert_string(char *s,int poi,char *t){
int n=strlen(s),m=strlen(t),i;
if(n==0){
printf("原数组为空\n");
return 0;
}
if(poi<0 || poi>n){
printf("位置错误\n");
return 0;
}
if(n+m<=Max){
for(i=n+m-1;i>=poi+m;i--)
s[i]=s[i-m];
for(i=poi;i<poi+m;i++)
s[i]=t[i-poi];
return n+m;
}
else if(n+m>Max && poi+m<=Max){
for(i=Max-1;i>=poi+m;i--)
s[i]=s[i-m];
for(i=poi;i<poi+m;i++)
s[i]=t[i-poi];
return Max;
}
else{
for(i=poi;i<=Max-1;i++)
s[i]=t[i-poi];
return Max;
}
}
int main()
{
char s[Max+1];
char t[Max+1];//随意数量
while(scanf("%s%s",s,t)!=EOF){
int m=Insert_string(s,0,t);
for(int i=0;i<m;i++)
printf("%c ",s[i]);
printf("\n");
}
return 0;
}