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

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

关于字符串的基本知识:

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里的字符,返回第一个满足条件的字符出现的位置,没有时返回NULL
char *strstr(cs,ct);//在cs中查寻串ct(查询子串),返回ct作为cs的子串的第一个出现的位置,ct未出现在cs里时返回NULL

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



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值