C语言字符函数和字符串函数

islower

这个函数能判断参数部分是否是小写,是小写就返回非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

strlen计算字符串中字符的个数,头文件是#include

strlen真正在使用的时候,确切来说是计算\0之前的字符的个数。如果字符中没有\0

,那么它会往后找,一直找到\0为止,此时返回的就是随机值。因为不知道它会在什么时候找到\0.

strcpy(目标字符,源字符)

是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(字符串1,字符串2)   

 strcmp是string compare的简写

它的作用:比较两个字符串大小,比较的是两个字符串ASCII码值的大小。而且是逐一比较。大于返回大于0的数(整型,后面也是),等于返回0,小于返回小于0的数。具体多少可以打印看看,不过一般不是重点。

strcmp用于字符串的比较,比如在结构体中,结合qsort,可以对名字进行排序。

还有作用相同的strncmp,多一个参数num,比较两个字符的前num个字符。

strcat (目标字符,源字符)

strcat用于字符串的追加。比如在字符串hello 后面追加一个world 使目标字符变成helloworld

使用strcat 需要目标字符有\0,源字符也有\0。strcat会从目标字符的\0后面开始追加,一直追加到源字符的\0为止。

相同作用的还有strncat,多了一个参数num,将源函数追加到目标字符后面,会追加\0,如果源字符小于num,那也不会多加内容。

strstr(目标字符,源字符)

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只有在相等时,才会跳向下一个位置。

你可能感兴趣的:(c语言,开发语言)