接着说哈,不管有没有人看,我都会很认真地写自己的博客
6.字符串函数
strcmp()函数,用来做字符方面的比较,注意:比较的是字符串==" ",而不是字符’ '==
该函数返回的值就是两个参数比较的差值前减后,值的大小参考ASCII码就好(但是也有例外,比如说我的电脑,前和后相等得0,前小于后得-1,前大于后得1)所以,我们关注的点应该是:两个字符串是否相等
该函数比较字符串中的字符,直到发现不同的为止
ps:char类型实际上是整数类型,所以可以使用关系运算符来比较
strncmp()函数,既可以比较到字符不同的地方,也可以只比较第三个参数指定的字符数
#include <stdio.h>
#include <string.h>
#define lifestyle 6
int main()
{
const char *list[lifestyle]={
"abdoki","abdmuo",
"abdguj","kuysqa",
"juscnd","hiiushdb"
};
int count=0;
for(int i=0;i<lifestyle;i++)
{
if(strncmp(list[i],"abd",3)==0)
printf("%s\n",list[i]);
count++;
}
return 0;
}
指针拷贝字符串的方法,是拷贝地址,而不是字符串本身,那么就用下面的函数拷贝好啦
strcpy()函数,包含两个参数,第二个参数指向的字符串(源字符串)拷贝至第一个指向的数组中(目标字符串)(记得初始化)
指向源字符串的指针(即第二个参数的指针)可以声明为指针、数组、字符串常量,但是指向目标字符串的指针应指向一个数据对象(如:指针)------声明数组将分配一个存储数据的空间,而声明指针只分配一个存储地址的空间
#include <stdio.h>
#include <string.h>
#define LIM 5
#define SIZE 40
char *s_get(char *st,int n);
int main()
{
char qwords[LIM][SIZE];
char temp[SIZE];
int i=0;
printf("Enter %d words beginning with 'q':\n",LIM);
while(i<LIM&&s_get(temp,SIZE))
{
if(temp[0]!='q')
printf("%s doens't begin with 'q'!\n",temp);
else
{
strcpy(qwords[i],temp);
i++;
}
}
puts("Here are the words accepted:");
for(i=0;i<LIM;i++)
puts(qwords[i]);
return 0;
}
char *s_get(char *st,int n)
{
char * ret;
int i=0;
ret=fgets(st,n,stdin);
if(ret)
{
while(st[i]!='\n'&&st[i]!='\0')
i++;
if(st[i]=='\n')
{
st[i]='\0';
i++;
}
else
while(getchar()!='\n')
continue;
}
return ret;
}
这个代码值得敲!!
这个函数还有其它属性:返回类型是char * ,返回的是第一个参数的值,即第一个字符的地址
第一个参数不必指向数组的开始
#include <stdio.h>
#include <string.h>
#define words "beats"
#define SIZE 40
int main()
{
const char *orig=words;
char copy[SIZE]="Do the best of your ability.";
char * ps;
ps=strcpy(copy+7,orig);
puts(copy);
puts(ps);
return 0;
}
写这个代码、看到这个结果,感悟颇深~~
1).beats\0 占了 best t 的位置,因为有’\0’,所以后面没有换的也没办法输出来了
2).ps并没有创建一个新的储存单位,它只是个指针,指向copy中的第八个元素,因为有’\0’,所以后面的也没有办法输出来了
与其担心什么储存位置够不够这些问题,这边倒是有个更加谨慎的选择:strncpy()函数
第三个参数指明可以拷贝的最大字符数(包括空字符在内)
在stdio.h中的sprintf()函数用来把数据写入字符串
第一个参数是:目标字符串的地址,其余的就和printf()一毛一样
就写到这了,写太长我都不想看。。呼呼