字符数组、字符串与string问题与应用
2014-03-28 17:55
260 查看
一、简单介绍相关问题
声明一下,我们从C风格和C++风格来分类讨论字符串问题。
首先说一说C语言中的字符数组与字符串它们所表现的不同点问题:
char str[7] = {‘n’,’i’,’h’,’a’,’o’}
char str[5] = {‘n’,’i’,’h’,’a’,’o’}
char str[] = {“nihao”}
char str[] = “nihao”
首先看第一行,数组一共是7个字节的空间大小,实际上有意义的只有5个字符,另外两个位置无法确定其值。再看第二行,数组正好就是是5个字节的空间大小,没有后边的多余字符。第三行和第四行其实是等价的,只是写法不同,它们占用的空间是几个字节呢?答案是6个,因为末尾系统自动添加了空字符'/0'。
前两行是纯正的字符数组,而后两行就是C风格的字符串了,即用字符数组表示字符串。另外,也可以通过指针来定义一个字符串,比如:char * pstr = “nihao”。
再来看看C++语言中字符串相关问题。
C++提供了3中表示C风格字符串的方法:字符数组、字符串常量、字符串指针。他们的类型都是char* (char指针),因此被自动作为char*类型参数传递给函数。字符串函数通过检测空值字符来确定字符串的结尾。
在C++中我们可以用C风格的字符串,这个是兼容的,并且在<cstring>库中还提供了很多C风格的字符串操作函数:
字符串复制函数:char *strcpy(char *s,const char ct)
串连接函数:char *strcat(char *s,const char *ct)
字符串比较函数:int strcmp(const char *cs,const char ct)
字符串长度函数:int strlen(const char *s)
除了C风格的字符串,C++还有自己的标准字符串类<string>,比如说string str = “hello”,对应的也提供了很多操作string的函数
另外,注意一下下边这个:
char name1[20] = "DreamerWay";
cout<<sizeof(name1)<<endl;
cout<<strlen(name1)<<endl;
第一个输出是20而第二个输出是10,也就是说sizeof输出的数组所占空间大小而strlen输出的是数组中存储的字符串的长度。
二、应用(主要针对C风格的字符数组、字符串)
1、字符指针作为函数的形参
void (char *from, char *to)
{
for(; *form != '\0'; from++, to++)
*to = *from;
*to = '\0';
}
2、字符数组作为函数的形参
void copy_string(char from[], char to[])
{
int i=0;
while(from[i] != '\0')
{ to[i] = from[i]; i++; }
to[i] = '\0';
}
3、字符输入输出
char str[80], *p;
p = gets(str);
puts(p);
puts(str);
4、字符串作为函数形参
void copy_s(char *str1,char *str2)
{
while((*str2=*str1)!='\0')
{
str1++;
str2++;
}
}
声明一下,我们从C风格和C++风格来分类讨论字符串问题。
首先说一说C语言中的字符数组与字符串它们所表现的不同点问题:
char str[7] = {‘n’,’i’,’h’,’a’,’o’}
char str[5] = {‘n’,’i’,’h’,’a’,’o’}
char str[] = {“nihao”}
char str[] = “nihao”
首先看第一行,数组一共是7个字节的空间大小,实际上有意义的只有5个字符,另外两个位置无法确定其值。再看第二行,数组正好就是是5个字节的空间大小,没有后边的多余字符。第三行和第四行其实是等价的,只是写法不同,它们占用的空间是几个字节呢?答案是6个,因为末尾系统自动添加了空字符'/0'。
前两行是纯正的字符数组,而后两行就是C风格的字符串了,即用字符数组表示字符串。另外,也可以通过指针来定义一个字符串,比如:char * pstr = “nihao”。
再来看看C++语言中字符串相关问题。
C++提供了3中表示C风格字符串的方法:字符数组、字符串常量、字符串指针。他们的类型都是char* (char指针),因此被自动作为char*类型参数传递给函数。字符串函数通过检测空值字符来确定字符串的结尾。
在C++中我们可以用C风格的字符串,这个是兼容的,并且在<cstring>库中还提供了很多C风格的字符串操作函数:
字符串复制函数:char *strcpy(char *s,const char ct)
串连接函数:char *strcat(char *s,const char *ct)
字符串比较函数:int strcmp(const char *cs,const char ct)
字符串长度函数:int strlen(const char *s)
除了C风格的字符串,C++还有自己的标准字符串类<string>,比如说string str = “hello”,对应的也提供了很多操作string的函数
另外,注意一下下边这个:
char name1[20] = "DreamerWay";
cout<<sizeof(name1)<<endl;
cout<<strlen(name1)<<endl;
第一个输出是20而第二个输出是10,也就是说sizeof输出的数组所占空间大小而strlen输出的是数组中存储的字符串的长度。
二、应用(主要针对C风格的字符数组、字符串)
1、字符指针作为函数的形参
void (char *from, char *to)
{
for(; *form != '\0'; from++, to++)
*to = *from;
*to = '\0';
}
2、字符数组作为函数的形参
void copy_string(char from[], char to[])
{
int i=0;
while(from[i] != '\0')
{ to[i] = from[i]; i++; }
to[i] = '\0';
}
3、字符输入输出
char str[80], *p;
p = gets(str);
puts(p);
puts(str);
4、字符串作为函数形参
void copy_s(char *str1,char *str2)
{
while((*str2=*str1)!='\0')
{
str1++;
str2++;
}
}
相关文章推荐
- 字符串相互转字符数组 string byte 数组 array of byte
- 字符数组转换字符串,字符串数组转换为字符串的问题
- 数组字符串问题------求数组前k小的元素,及其应用
- Java中char数组(字符数组)与字符串String类型的转换方法
- java基础知识回顾之---java String final类普通方法的应用之字符串数组排序
- 《C++标准函数库》中说的有三个函数可以将字符串的内容转换为字符数组和C—string (CString、char*、String三种类型互换)
- JAVA字符数组 char[] 到字符串 String
- 字符数组和字符串,char 和string定义的字符串的区别与遍历
- C#控制台基础 应用dictionary记录一个string字符串中各个字符出现的次数
- c语言字符指针数组经典,此后不必再担心字符串问题.
- 字符数组与字符串string详解
- 问题1:java中没有实现这种“byte a = 0xB2 --> String b = “B2””转换的简单实现需要自己实现。 答:自己编写的转换函数,思路将byte的高低4位分开,分别转换为对应的字符然后合成返回的字符串。 java 代码 1.
- Delphi的字符(Char), 字符串(String), 字符串指针( PChar ), 字符数组 array of char
- 字符数组和字符串,char 和string定义的字符串的区别与遍历
- 完成一程序演示字符数组、C风格字符串、std::string和MFC中的Cstring类型之间的相互转换
- String字符串与字符(char类型)数组互相转换
- 字符串,字符数组,整型数组,List之间的转换应用
- Delphi的字符(Char),字符串(String),字符串指针(PChar),字符数组arrayofchar(来自http://delphi.cjcsoft.net/论坛)
- JPasswordField 中得到的字符数组转化为字符串(密码乱码问题)
- C语言字符数组与字符串的使用及加结束符'\0'的问题