C/C++学习笔记笔记28:字符与字符串

来源:互联网 发布:淘宝卖家怎么开发票 编辑:程序博客网 时间:2024/05/21 10:03

字符串是数据结构中相对简单的一种数据结构。

关于字符串的基本知识:

1:字符与字符串

字符常量:字符常量是用单撇号括起来的一个字符

<常见的控制字符也是一种特殊形式的字符常量,以\开头的字符序列,在屏幕上不能显示的>
2:字符与字符串的存储

1)字符

将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字符相应的ASCII码存放到存储单元中。

在内存中,字符数据以ASCII码存储,它的存储形式就与整数的存储形式类似。这样字符型数据与整型数据之间可以通用。

所以一个字符数据既可以以字符形式输出,也可以以整数形式输出。——运用的其实就是ASCII码

关于字符的问题,在做输出的时候,可以输出字符类型的,也可以输出整型的。这二者通用。另有一个常见的问题就是大小写转换的问题,还有就是在数据结构中模式匹配的问题。这在接下来会依次探讨:

e.g.1:大小写字符转换

#include <stdio.h>void main(){char c1,c2;c1=‘a’;c2=‘b’;c1=c1-32;c2=c2-32;printf("%c%c".c1,c2);}

是因为大小写在ASCII码表中相差32个单位。所以用小写的存储减去32就可以得到大写的。

2)字符串

字符串常量是一对双撇号括起来的字符序列。

C语言规定:在每个字符串常量的结尾加一个"字符结束标识",以便判断字符串结束。以'\0'作为字符串结束标志。所以如果说是“china”的字符串,它其实是占6个字符,而不是5个字符。


2:整数与字符串之间的转换

e.g.1怎么将整数转化为字符串,并且不用函数itoa?

分析:itoa函数如何使用?
itoa函数是取整数输入值,并将其转换为相应数字的字符串。

函数原型:char *itoa(int value,char *string,int radix);

原型说明:

value:表示欲转换的数据

string:目标字符串的地址

radix:转换后的进制数,可以是16进制,10进制等。

运用:

#include <iostream>;#include <stdio.h>int main(void){     int number = 12345;     char string[7];     itoa(number,string,10);     printf("integer = %d string = %c\n",number,string[1]);return 0;}
如果不用itoa函数又该如何转换?
方法:整数转换为字符串,可以采用加'0',在逆序的方法,整数加'0'就会隐形的转换为char类型的数

运用:

<pre name="code" class="cpp">#include <iostream>#include <stdio.h>int main(void){   int num=12345,j=0,i=0;   char temp[7],str[7];   while(num){   temp[i]=num%10+'0';   i++;   num=num/10;}   temp[i]=0;   printf("temp=%s\n",temp);   i=i-1;   printf("temp=%d\n",i); //刚刚转换的字符串是逆序的,必须把它反转过来   while (i>=0)  {     str[j]=temp[i];     j++;     i--;   }  str[j]=0;  printf("string =%s\n",str);  return 0;}

e.g2:字符串又是如何转换成整数的?

分析:字符串转换成整数,可以采用减'0'再乘以10累加的方法。字符串减'0'就会转化为整型数据。

运用:

#include <iostream>#include <stdio.h>int main(void){  int num = 12345,j=0,i=0,sum=0;  char temp[7]={'1','2','3','4','5','\0'},str[7];    while(temp[i])   {       sum=sum*10+(temp[i]-'0');       i++;    }    printf("sum=%d\n",sum);    return 0;}

针对上面的问题有个疑问,为什么加上'\0'就可以辨别字符与整型的区别呢?

对于这个问题还得分析下'\0'这个东西,'\0'代表ASCII码为0的字符,ASCII码为0的字符不是一个显示的字符,而是一个“空操作符”,即它什么也不做。用它来作为字符串结束标志不会产生附加的操作或增加有效字符,只是起到一个供辨别的标志。

补充:C语言标准库下的字符串函数

先约定如下:s、t分别表示(char*)类型的参数,cs、ct表示(const char *)类型的参数,它们都表示字符串。

n表示size_t类型的参数,c是整型参数。

常见的字符串函数有:

size_t strlen(cs); //求出cs的长度

char *strcpy(s,ct);//把ct复制到s中去char *strncpy(s,n,ct);//把ct中的n个字符复制到s中去

char *strcat(s,ct);//把ct复制到s字符串之后char *strncat(s,n,ct);//复制ct中的n个字符到s中去

int strcmp(cs,ct);//比较cs与ct的大小,分别返回正值、0、负值int strncmp(cs,n,ct);//比较cs和ct的大小,最多比较n个字符

char *strchr(cs,c);//在cs中查找第一个c出现的位置,并用指向这个位置的指针表示,如果没有则返回null;char *strrchr(cs,c);//在cs中查找最后一个c出现的位置

size_t strspn(cs,ct);//在cs中查找全部由ct里字符组成的序列,并返回其长度size_t strcspn(cs,ct);//在cs中查找全部由非ct里字符组成的序列,并返回其长度

char *strpbrk(cs,ct);//在cs里查找ct里的字符,返回第一个满足条件的字符出现的位置,没有时返回NULLchar *strstr(cs,ct);//在cs中查寻串ct(查询子串),返回ct作为cs的子串的第一个出现的位置,ct未出现在cs里时返回NULL

char *strerror(n);//返回与错误编号n相关的错误信息串(指向该错误信息串的指针)char *strtok(s,ct); //在s中查寻由ct中的字符作为分隔符而形成的单词



0 0