字符串和字符串操作
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;
}