字符、字符串数组

来源:互联网 发布:外国人评价三体 知乎 编辑:程序博客网 时间:2024/06/07 11:47
1.字符数组的初始化:char[10] = {'I' , ' ' , 'a ', 'm' , ' ' , 'h' , 'a' , 'a' , 'p' , 'y' };  //  a[0] = 'I', a[1] = ' ', a[2] = 'a', a[3] = 'm', a[4] = ' ', a[5] = 'h', a[6] = 'a' , a[7] ='a' ,a[8] = 'p', a[9] ='y'
2.引用一个字符数组中的元素:可以引用一个字符数组中的一个元素,得到一个字符
示例1:输出一个已知的字符串
#include<stdio.h>
int main()
{
  char[15] = {'I' , ' ' , 'a' , 'm' , ' ' , 'a' , ' ', 's' , 't' , 'u' , 'd' ,'e' ,'n' , 't' ,'.'  };
  int i;
  for(i=0;i<15;i++)
  {
     printf("%c",a[i]);
  }
  printf("\n");
  return 0;
}
3.字符串和字符串结束标志
字符串的有效长度和字符数组的长度(人们比较关心字符串的有效长度)
eg:  定义一个字符数组的长度为100,而实际有效字符只有40个
为测定字符串的实际长度,c语言中规定了一个“字符串的结束标志”,以字符‘\0’作为结束标志。
c系统在用字符数组存储常量时会自动加一个 '\0' 作为结束符

char a[] = {"I am happy"};//可以省略花括号直接写成 char a[] ="I am happy";
与这个等价char a[] = {'I' , ' ' , 'a ', 'm' , ' ' , 'h' , 'a' , 'a' , 'p' , 'y' , '\0' };//它的长度为11
 
char c[10] = {"china"};//数组的前五个元素为;'c' , 'h' , 'i' , 'n' , 'a' ,第六个元素为‘\0’,后四个元素也设定为空字符‘\0’。
eg:  char c[5] = {'c' , 'h' , 'i' , 'n' , 'a'};  // 正确
       char c[5] = {"china"};  //错误,应该为char c[6] = {"china"};因为字符串存储常量时会自动在尾部加入结束符'\0'
4.字符数组的输入输出
(1)逐个字符输入输出。用格式符“%c”输入或输出一个字符串。   //如示例1
(2)将整个字符串一次输入输出 。用“%s”格式符。
//char c[] ={"china"};
//printf("%s\n",c);
// 用“%s”格式符输出的时候,printf函数中的输出项是字符数组名,而不是数组元素,所以为c.
5.使用字符串处理函数
(1)puts函数——输出字符串的函数
其一般形式为:puts(字符数组);

char str[] = {"Chian\nBeijing"};
puts(str);
输出:
China
Beijing

(2)gets函数——输入字符串的函数
其一般形式为:gets(字符数组);

gets(str);
从键盘输入:
Computer

//puts 和gets函数只能输入和输出一个字符串,不能写成puts(str1,str2);或gets(str1,str2);
(3)strcat函数——字符串连接函数
strcat(str1,str2)//其作用是把两个字符串数组中的字符串连接起来把str2接到str1的后面,结果放在str1中,函数调用后得到一个函数值——str1的地址。
eg:
char str1 [30] = {"People's Republic of"};
char str2[] = {"China"};
printf("%s",strcat(str1,str2));
输出:
People's Republic of China

(4)strcpy,strncpy函数——字符串复制函数
  <1>  strcpy(str1,str2) //"字符串复制函数",将str2复制到str1中去(全覆盖)
eg:
char str1[10],str2[] = "China";
strcpy(str1,str2);
得到:str1为China\0\0\0\0\0

char str1[30] ={"People Republic of"};
char str2[] = {"China"};
printf("%s ",strcpy(str1,str2));
输出结果:
China


   <2> strncpy(str1,str2,n)//复制时将str2和其后面的'\0'一起复制到str1中,取代前面字符str1中的6个字符,而最后4个字符并不一定是'\0',而是str1中原有的最后四个字节的内容
eg:
char str1 [30] ={"People's Republic of"};
char str2[] ={"China"};
ptintf("%s ",strncpy(str1,str2,3));
输出结果:
Chiple's Republic of
(5)strcmp函数——字符串比较函数
<1>strcmp(str1,str2)//比较str1,str2;
str1 = st2;   //0
str1>str2;   //正数1
str1<str2;   //负数-1
eg:
str1[] =computer
str2[] = compare//computer,computes
if(strcmp(str1,str2)>0)
   printf("yes")
else if(strcmp(str1,str2) == 0)
   printf("0");
else
   printf("no");
<2>strncmp(str1,str2, n)    //比较str1,str2中前n个字符的大小
(6)strlen函数——测字符串长度的函数
strlen(str)  //直接测字符串的长度(不包括'\0')
 eg:
char str[] = "china";
printf("%d",strlen(str)); //结果为5直接测字符串常量的长度
printf("%d",sizeof(str));//结果为6

char str[10] ="china";
printf("%d",strlen(str));//结果为5
printf("%d",sizeof(str));//结果为10
(7)strwr函数——转换为小写的函数
(8)strupr函数——转换为大写的函数
(9)strtok函数——字符串分割
char *strtok(char *s,const *delim);//分解字符串为一组标记串,s为要分解的字符串,delim为要分隔的字符串
eg:
char s[] = "ab-cd:ef;gh:i-kl;mnop;qrs-tu:vwx-y:z";
char *delim = "-:";
char *p;
printf("%s ",strtok(s,delim));
while((p == strtok(NUll, delim)))
  printf("%s ",p);
printf("\n");
输出结果:
abcd ef;jh i jkl;mnop;qrs tu vwx y x
(10)memcpy函数——内存拷贝函数
void *memcpy(void *dest,const void *src, sizen_t n); //从源函数src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中
<1>source和destin所指的内存区域不能重叠,函数返回指向destin的指针
<2>与strcpy相比,memcpy并不是遇到'\0'就结束,而是一定会拷贝完n个字节
<3>若数组destin本身已有数据,执行memcpy后,将覆盖原有数据(最多覆盖n个)
eg1:
char a[100],b[50];
memcpy(b,a,sizeof(b));与strcpy(a,b);意义相同  :把b内存的所有拷贝给a内存;

eg2:
char *s="Golden Global View";
char d[20];
memcpy(d,s+14,4);//s从第14个字符开始复制,向后连续复制4个字符
printf(“%s”,d);
getchar();
输出结果为:View

eg3:
char src[] ="******";
char dest[] =“abcd123as5”;
printf("%s\n",dest);
memcpy(dest,src,strlen(src));
printf("%s \n",dest);
输出结果为: abcd123as5
                     ******3as5  
0 0