字符串处理函数:复值函数strcpy、比较函数strcmp、连接函数strcat、大写转换函数strupr

来源:互联网 发布:上海盘石软件电话 编辑:程序博客网 时间:2024/06/05 18:54

字符串和字符串操作

C中字符串:以‘\0’(空字符)结尾;

声明一个字符串,用数组:

char str[ ]={‘I’, ’L’, ‘O’, ‘V’, ‘E’, ‘\0’};

使用字符串常量:

char str[ ]=”I LOVE”;

同样:后边有隐含的‘\0’;

故声明共有5个有效的字符,但占据了6个内存字节空间;

注意:区分  空格字符和空字符(‘\0’)的区别,出现空字符,字符串被截断为两个字符串。

字符数组输入

char sz[ 10];

scanf(“%s”, sz);   //输入不超过12个字符,其中sz表示首地址

 

注:scanf和printf等处理函数是依次处理数组中的每个字符,直到遇到空字符为止。

如:输入“helloword”,则只显示“hello”;

例子:

#include<stdio.h>

#include<conio.h>

void main(void)

{

       char sz[]="ILove";

       printf("%s\n",&sz[2]);  //Love

   printf("%s\n",&sz);    //I Love

       sz[3]='\0';

       printf("修改后的字符串为:%s\n",sz);  //I L

       getch();

}

末尾的空字符是很多函数和算法判断字符串是否结束的依据。

使用gets函数读入整行输入

gets(string);

       printf("%s\n",string);

 

使用puts函数输出

char sz[256];

puts(sz);

printf(“I  Love”);

 

字符串处理函数

错误用法:

char x[10],  [10]=”123456789”;

(1)x=”7894561223”;

  (2)x=y;

  (3)x+=y;

注:字符数组名的比较实际上比的是两个数组内存单元首地址的大小,如:

charx[10],y[10]=”123456789”;

if(x<y)  //数组名被编译器解析为首地址,数组内存首字节地址

{……}

 

数组的基本单位是字符,编写一个函数计算字符串中的字符的个数:

例子:

#include<stdio.h>

#include<conio.h>

void main(void)

{

       char str[256]={'\n'};

       int strlenOwn(constchar*);

       int length;

       printf("请输入一个字符串:\n");

       gets(str);

       length=strlenOwn(str);

       printf("输入字符串的长度为:%d",length);

 

int strlenOwn(const char* psz) //*const使得字符数组不被修改,指针psz可修改

{

              int len=0;

        while(*(psz++))

                   len++;

             return len;

              printf("len=%d",len);

}

 

一维数组:数组名是指向数组的第1个元素的指针,

int num[10]={0};

int *p1=num;

int* p2=num+1;

其中,p1指向数组中第一个元素num[0];

 

strlen函数与size_t:

strlen: 字符串的长度,不计末尾的空字符;返回类型为size_t;

unsigned int类型引入了助记符size_t,即“size_t是无符号整型unsigned  int类型的别名”

 

字符串复制函数strcpy :

例子:

#include<stdio.h>

#include<conio.h>

#include<string.h>

void main(void)   //主函数

{

   char str1[256]={'\0'};   //开辟第一个字符数组

   char str2[256]={'\0'};   //开辟第二个字符数组

   printf("请输入第1个字符串:\n");  //提示用户

   gets(str1);               //输入字符

   strcpy(str2,str1);         //将第一个数组字符复制给第二个数组

   printf("第2个字符串为:\n%s",str2);   //输出第二个字符串

}                                                  

 

字符串比较函数strcmp:                                                                                           

此函数比较的不是长度,而是逐个比较字符的ASCII码;哪个首次出现大的值,则比较大。如:“Hello,C++”比“Hello,c++”小;

例子:

if(strcmp(str,"HUANG123")==0)

{}

 

字符串连接函数strcat

形式: char*strcat(字符串1,字符串2);         

该函数会将字符串2附在字符串1后面,则字符串1所在的数组有足够的内存空间来容纳字符串2;

 

全转换为大写形式:  char* strupr(字符串);

例子:

char a[10]="Huang";

        strupr(a); //将a中全转为大写字符  

 

以上综合例子:

       #include<stdio.h>

#include<conio.h>

#include<string.h>

void main(void)

{

       char str[256]={'\0'};

       while(1)

       {

              printf("请输入密码字符串:\n");

              gets(str);

              strupr(str);      //全部转为大写字符

              if(strcmp(str,"HUANG123")==0)   //比较两个字符串是否相等

              {

                     break;

              }

       }

       printf("密码正确");

       getch();

}    

以上例子红色部分可用链式操作

if(strcmp(strupr(str),”HUANG123”)==0)

{

       break;

}

0 0
原创粉丝点击