这个函数能判断参数部分是否是小写,是小写就返回非0的整数,不是小写就返回0。和 if 函数组合,就能修改字符串的小写了。
int c =0;
char ch[]={"ADjxsfk"};
c = ch[i];
if(islower (c)) //如果是小写就进来,大写返回为0就是假
{
c-=32; //小写-32是大写。
}
字符转换函数
tolower 大写字母转小写
toupper 小写字母转大写
char c[] = "abSDF";
int sz = strlen(c);
for(i=0; i
如果c[i] 是小写, 就把它转为大写.
字符函数很多,在此不一一赘述。
接下来介绍几个常用的字符串函数。
strlen计算字符串中字符的个数,头文件是#include
strlen真正在使用的时候,确切来说是计算\0之前的字符的个数。如果字符中没有\0
,那么它会往后找,一直找到\0为止,此时返回的就是随机值。因为不知道它会在什么时候找到\0.
是string copy的简写。作用是把一串字符复制到另一串字符中,用源字符取代目标字符,源字符会替代目标字符的 末尾的 \0 。源字符串必须以 \0 结尾。
实质:strcpy会在源字符地址中找\0,把\0前面的字符以及这个\0都拷贝到目标字符中。
char arr1[ ] = { "hello"};
char arr2[ ] = {"world"};
strcpy(arr1,arr2);
拷贝完以后字符串arr1就变成了world。
还有类似的strncpy,多了一个n,也多了一个参数num,单位字节。这个函数比起strcpy更安全可控。如果源字符的个数少于num,那么会在目标的后面追加0,直到满足num个。
strcmp是string compare的简写
它的作用:比较两个字符串大小,比较的是两个字符串ASCII码值的大小。而且是逐一比较。大于返回大于0的数(整型,后面也是),等于返回0,小于返回小于0的数。具体多少可以打印看看,不过一般不是重点。
strcmp用于字符串的比较,比如在结构体中,结合qsort,可以对名字进行排序。
还有作用相同的strncmp,多一个参数num,比较两个字符的前num个字符。
strcat用于字符串的追加。比如在字符串hello 后面追加一个world 使目标字符变成helloworld
使用strcat 需要目标字符有\0,源字符也有\0。strcat会从目标字符的\0后面开始追加,一直追加到源字符的\0为止。
相同作用的还有strncat,多了一个参数num,将源函数追加到目标字符后面,会追加\0,如果源字符小于num,那也不会多加内容。
strstr用于在第一个字符串里找第二个字符串,找到以后返回与第二个字符串相同的首字符。
目标字符和源字符都需要有\0
例如:目标字符是swimming,源字符是min,strstr会从swimming的第一个字符s开始找,找它是否和源字符的第一个字符m相等,相等就下一个对比。直到找到swimming中的min为止,或者找完也没有min,那就返回空指针。
模拟一下
char * My_strstr (const char* p1, const char *p2)
{
char *m = (char*)p1;
char *n = (char*)p2;
char *flag = (char *)p1;
if(!*p2)
{
return (char*)p1;
}
while(*m)
{
m = (char*)p1;
n = (char*)p2;
while(*m && *n && !(*m - *n ))
{
m++;
n++;
}
if(!*m)
{
return flag;
}
flag++;
}
return (NULL);
}
int main()
{
char arr[ ] = {"swimming"};
char *test = My_strstr(arr,"min");
strncpy(test,"abc",3);
printf( "%s\n", arr);
return 0;
}
*p2放在逻辑语句中是*p2为真,!*p2的意思是*p2为假。在C语言中,0是假,非0是真。所以,
!*p2的意思是*p2为假,也是*p2 == 0; !(*m - *n)的意思是*m -*n为假,也就是*m- *n ==0,也就是*m == *n。
如果源字符串指向\0,那么直接返回目标字符的地址。
如果源字符有字符串,那么判断m指向的位置。p1,p2不变,用m、n代替它们变换位置,然后用flag记录位置,以便*m与*n在相等又不等以后,可以随时跳回。如果能在目标字符中找到源字符,那么正常返回,返回的位置就是flag的位置。当*m==*n时,flag是不变的,flag储存的是他们相等的第一个字符的位置。当*m != *n时,flag会相加。而n只有在相等时,才会跳向下一个位置。