数组跟字符串有什么联系和区别

作者&投稿:华纪 (若有异议请与网页底部的电邮联系)
字符串数组与字符指针的区别~

一、 读写能力
char *a = “abcd”; 此时"abcd"存放在常量区。通过指针只可以访问字符串常量,而不可以改变它。
而char a[20] = “abcd”; 此时 "abcd"存放在栈。可以通过指针去访问和修改数组内容。
二、用法
在编程过程中如果只涉及到对字符串的读取,那么字符数组和字符串常量都能够满足要求,如果有写入(修改)操作,那么只能使用字符数组,不能使用字符串常量。
C语言有两种表示字符串的方法,一种是字符数组,另一种是字符串常量,它们在内存中的存储位置不同,使得字符数组可以读取和修改,而字符串常量只能读取不能修改。

三、存取效率
char *a = “abcd”; 存于静态存储区。在栈上的数组比指针所指向字符串快,因此慢。
而char a[20] = “abcd”; 存于栈上,更快。

首先不知道你假定的是哪类编程语言,如果是C,字符就是ASCII码中的一个值,用单引号括住。
字符串就是双引号捆起来的0个或多个字符。
字符数组是用来存储字符的,也可用于存储字符数组,只是在使用时应注意。
总结,字符是指一个符合ASCII码的值,而字符串一般都是多个值,字符数组用来存储的。

简单点说:
数组是一段连续的内存,而字符串也是一串连续的内存,所以字符数组和字符串很大程度上有共同的性子,比如:
char array[4]={“abc”};//注意有一个串结束标志,数组不可以越界
char *p;
p=array;//这样就可以利用指针p运算字符数组array了,此时p指向的是数组第一个元素的地址
如果char *pt="abc"; pt指针也是指向a的地址,同样可以运算了。

区别在于字符串可以使用字符串函数:gets,puts,strlen,strcmp等等,实用字符串函数使处理字符串更方便了。

另外,字符在内存中是以ascll码存储的,以%d格式输出一个字符就是输出它的ascll码,\(字符ascll码)这种方式可以引用一个字符。

给你一些我简单总结的几个字符串函数,还不是很全,不过一般常用的可以了。
字符串处理函数:
字符串函数可分为:字符串输出(puts),输入(gets),合并(stract),拷贝(strcpy),比较(strcmp),转换,复制,搜索(strchr)
注意:这一章例题中的字符串可用指针代替。

1 字符串输出函数puts:
格式:puts(字符数组名);
功能:把字符数组中的字符串输出到显示器。

例:
#include <stdio.h>

main()
{
char a[]="made in china\r\nis well";
puts(a);
}
注意:puts()函数可以使用转义字符;
puts完全可以由printf函数取代,当要求按格式输出时通常用printf ;
puts()函数用来向标准输出设备(屏幕)写字符串并换行, 其调用格式为:
puts(s);
其中s为字符串变量(字符串数组名或字符串指针)。
puts()函数的作用与语printf("%s\n", s)相同。
例4:
main()
{
char s[20], *f; /*定义字符串数组和指针变量*/
strcpy(s, "Hello! Turbo C2.0"); /*字符串数组变量赋值*/
f="Thank you"; /*字符串指针变量赋值*/
puts(s);
puts(f);
}

2 字符串输入函gets:
格式:gets(字符数组名);
功能:从标准输入设备键盘上输入一个字符串;该函数得到一个函数值为该字符数组的首地址;
例:
#include <stdio.h>

main()
{
char a[15];

printf("in put a string:\r\n");
gets(a);
puts(a);
}
注意:gets函数不以输入中的“空格”为结束标志,这与scanf函数不同;
gets()函数
gets()函数用来从标准输入设备(键盘)读取字符串直到回车结束, 但回车符
不属于这个字符串。其调用格式为:
gets(s);
其中s为字符串变量(字符串数组名或字符串指针)。
gets(s)函数与scanf("%s", &s)相似, 但不完全相同, 使用scanf("%s", &s)
函数输入字符串时存在一个问题, 就是如果输入了空格会认为输入字符串结束,
空格后的字符将作为下一个输入项处理, 但gets() 函数将接收输入的整个字符
串直到回车为止。
例5
main()
{
char s[20], *f;
printf("What's your name?\n");
gets(s); /*等待输入字符串直到回车结束*/
puts(s); /*将输入的字符串输出*/
puts("How old are you?");
gets(f);
puts(f);
}

3 字符串连接函数strcat:
格式:strcat(字符数组名1, 字符数组名2);
功能:把字符数组2里字符串连接到字符数组1里字符串的后边并删除字符串1的串结束标志’\0’;返回值为数组1的首地址,因此数组1要有足够的长度;
例:
#include <stdio.h>
#include <string.h>

main()
{
static char a[]="my name is ";
char b[15];

printf("in put your name\r\n");
gets(b);

strcat(a, b);
puts(a);
}

4 字符串拷贝函数strcpy:
格式:strcpy(字符数组名1, 字符数组名2);
功能:把字符数组2中的字符串拷贝到字符数组1中;字符数名2,也可以是一个字符串常量。这时相当于把一个字符串赋予一个字符数组。
例:
#include <stdio.h>
#include <string.h>

main()
{
char a[20];
char b[]="made in china";
strcpy(a, b);

puts(a);
}
注意:要求字符数组1要有足够的长度。

5 字符串比较函数:

注意:1、逐字对比判断字符的ASCII码值大小。
2、比较到某个字符判断出大小时立即结束。输出非零。
3、字符串相同时输出零

strcmp:
格式:strcmp(字符数组名1, 字符数组名2);
功能:按照ASCII码的顺序比较两个数组中的字符串,并由函数返回值返回比较结果。
字符串1=字符串2,返回值=0;
字符串1>字符串2,返回值>0;
字符串1<字符串2,返回值<0;
本函数可以比较两个字符串常量,或比较数组和字符串常量。
例:
#include <stdio.h>
#include <string.h>

main()
{
int k;
char a[20];
char b[]="i love china";

printf("in put s string\r\n");
gets(a);
k=strcmp(a, b);

if(k==0)
printf("a=b\r\n");
if(k>0)
printf("a>b\r\n");
if(k<0)
printf("a<b\r\n");

}
注意:不是比较字符串长度,而是比较ASCII码的大小,可用于姓名字母排序。

strncmp:
格式:strncmp(字符数组名1,字符数组名2,int length);
功能:比较字符串1和字符串2的前length个字符;
字符串1=字符串2,返回值=0;
字符串1>字符串2,返回值>0;
字符串1<字符串2,返回值<0;
例:
#include <stdio.h>
#include <string.h>

main()
{
int k;
char *a="I love china";
char *b="I am happy";

k=strncmp(a, b, 6);
if(k>0)
printf("the string b is greater than string a\r\n");
if(k<0)
printf("the string b is less than string a\r\n");
if(k==0)
printf"(" the string b is equal string a\r\n ")
}

strncmpi:
格式:strncmp(字符数组名1,字符数组名2,int length);
功能:比较字符串1和字符串2的前length个字符,不区分大小写;
例:

6 测字符串长度函数strlen:
格式:strlen(字符数组名);
功能:测字符串的实际长度(不含串结束标志’\0’,但转义字符算一个字符),并作为函数的返回值;
例:
#include <stdio.h>
#include <string.h>

main()
{
int k;
char a[]="i love china";
k=strlen(a);

printf("the length of string is:%d\r\n", k);
}

注意;字符串不能用==或者!= 的只能用函数。

7 字符搜索函数strchr:
格式:strchr(字符数组名,待找的字符);
功能:查找字符串中首次出现字符的位置,并返回出现字符位置的指针,若字符不存在则返回NULL;

例:
#include <stdio.h>
#include <string.h>

main()
{
char a[30];
char *p, c='n';

strcpy(a, "I love china");
p=strchr(a, c);

if(p)
printf("the character %c is at position %d\r\n", c, p-a);
else
printf("the character is not found:\r\n");
}

注意:倒数第三句的(p-a)用法。

1.数组是集合结构,用于存储一组数据,是内存中具有连续性的数据结构;字符串是若干个字符(char)组成的序列。两者没有任何联系。

2.字符数组(string[])可以直接输出,因为string是输出的基本单元。而数值型数组(int[])需要转换格式,将int转换为string后才能输出。

甲壳虫技术论坛 是你学习的好地方


C语言里如何输入几个字符串放到一个数组中
方法如下:include <stdio.h> void main(){ char s[10][80];for(i=0;1<10;i++){ gets(s[i]);} }

java之字符流与字节流的区别和联系
字符流处理的单元为2个字节的unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组。所以字符流是由java虚拟机将字节转化为2个字节的unicode字符为单位的字符而成的,所以它对多国语言支持性比较好!如果是 音频文件、图片、歌曲,就用字节流好点,如果是关系到...

plc字符串是什么意思
tcp\/ip通信除了modbus-tcp之外,还有常用的通过json格式的数据通过http协议上报数据给云服务器,通过mqtt协议与云服务器建立长链接,实现物联网功能,使得通过远程对plc进行控制,这里的http和mqtt都是文本格式的协议,需要用到字符串。通常plc的显示界面由工控屏实现,对于自带显示的plc一体机,如果显示界面...

什么是字符运算
字符运算主要有字符串比较大小,连接,裁剪等等。字符的比较大小实际上是比较字符ascii码的大小,比如A的ascii码为65,B的ascii码为66,那么我们认为‘B’>'A';如果是字符串,那么我们以第一个为主,"Ad"<"Bf",就像浮点数的十位百位一样。字符串的连接就是将两个字符串连接在一起。有些环境已经...

c语言中,字符、字符串有什么作用?可以进行哪些运算?还有什么用法?谢谢...
字符串用来进行运算通常是用于2个比较大的整数之间的运算,如12345678901230145732475237490523749052730945 19834709128754018923749172349012709760913710980 像这种长度的数字,是没有数据类型与之进行匹配的,这个时候就得使用字符串进行运算,取出字符串中各个位上的数字进行单独运算,如果想了解得更仔细,可以 HI我。

如何把String数组的元素联结为一个字符串
循环遍历这个数组啊,new个string对象去拼接不就行了。String str = "";String[] array = ...for (int i = 0; i < array.length.(); i++) { str = str + array[i]} 输出str。

join()的描述
如果 delimiter 是零长度字符串,则在同一列表中列出全部项,没有分界符。别名implode(PHP3, PHP 4, PHP 5)英文意义:表示参加某一团体、组织、机构,并作为其中一员工作室名称JoinStudio卓音工作室,英文简称Join,隶属于东北师范大学学生就业指导服务中心信息服务室,负责学校就业网站的开发与维护。Linux...

合并字符串的库函数是()
合并字符串的库函数是CONCATENATE CONCATENATE 函数用于Excel中,可将最多 255 个文本字符串联接成一个文本字符串。联接项可以是文本、数字、单元格引用或这些项的组合,且必须将希望在结果中显示的任意空格或标点符号指定为使用双引号括起来的参数。函数语法 CONCATENATE(text1, [text2], ...)CONCATENATE...

关于C语言的字符串的。
选择 B 不论是空字符" _",还是字母,它的长度都为1。而汉字所占的长度为2.so:1、对于字符串“He has 钱!”它的长度为10;2、对于字符数组,在C语言里,字符数组会在末尾自动添加‘\\0’,其长度也为1.所以,字符数组长度 == 字符串长度 + 1.谢谢!

c语言如果用字符串类型输出字符数组,字符数组最后一个是0,那么为什么...
因为你的字符串数组错误的引用了存在脏数据的内存 要避免,就要初始化数组 memset(str,0,n)将str字符串中前n个字节替换为0并返回str;str为你定义的字符串,n为字符串容量,并非长度,即char a[20],不管你有几个字符,n为20为佳 加上头文件string.h 消息来源华夏联盟,亲 ...

台江县14787741846: 字符串和字符串数组有什么区别啊? -
羽劳荷叶: 字符串就是若干字符弄成一串成了字符串; 字符串数组就是若干个字符串弄在一起就组成了数组; 字符串里面的每一个元素是字符; 字符串数组里面的每一个元素是字符串.

台江县14787741846: 字符串和数组有什么不同? -
羽劳荷叶: 数组的元素可以是任意一种类型,而字符串是一种特殊的数组,它使用了一种众所周知的确定其长度的规则. 有两种类型的语言,一种简单地将字符串看作是一个字符数组,另一种将字符串看作是一种特殊的类型.C属于前一种,但有一点补充...

台江县14787741846: 字符串与无符号字符数组有什么区别 -
羽劳荷叶: C语言字符数组和字符串的区别,字符数组是一个存储字符的数组,而字符串是一个用双括号括起来的以'\0'结束的字符序列,虽然字符串是存储在字符数组中的,但是一定要注意字符串的结束标志是'\0'.总的来说是没有区别的,字符串就是以字符数组形式存储的.可以把一个字符串看成是一个字符数组,可以按数组那样操作.两者没有本质的区别,只是在不同的情况下有不同的叫法.

台江县14787741846: 字符串与字符数组有什么区别 -
羽劳荷叶: 最为明显的差别是二者装载有样多字符时,用函数strlen()返回的长度不同,且字符串的长度比字符数组长度大1.这是因为在初始化时,字符串是以指针标记其起始地址,而数组则以数组名标记的,数组名是常量,不像指针那样可以使用++或--使其指向不同位置的字符.

台江县14787741846: 字符串和字符数组的区别或关系
羽劳荷叶: 在C语言里面字符串就是用字符数组表示的,所以意义是相同的, 但在别的语言里面就不是这样子了,比如Java,C#等.

台江县14787741846: 字符串和字符数组分别是什么,有什么联系和区别,最近自己看这个都快看晕了 -
羽劳荷叶: 字符,字母数字符号. string a=“……¥&&¥#%#” 一串! string [] a={“1alfkaslfjlasf”,“alsdkjflasjf”,“…&%”,“dslkfs”} 数组

台江县14787741846: 字符数组和字符串的区别 -
羽劳荷叶: 对C语言而言 字符数组是容器,字符串是内容 字符数组好比香水瓶,字符串就是其中的香水 字符串长度必须小于字符数组长度.

台江县14787741846: 请问: 字符数组和字符串有什么区别? -
羽劳荷叶: 字符数组是字符的数组,字符串是一串字符~~~~嘿嘿字符串必须以'\0'结尾,字符数组则不必,不过一般都把字符数组当字符串用,仍须以'\0'结尾,不然内存中连续存储的2个字符串无法区分.

台江县14787741846: c++中. 字符串和数组有什么区别呢?
羽劳荷叶: 对于字符串,系统会在字符串的末尾自动添加一个'\0'作为结束标志,因此在程序中往往依靠检测'\0'的位置来判定字符串是否结束; 对于字符数组,举个例子,char c[5]={'a','b','c'};则系统会对数组的最后的两个元素自动填补空字符'\0'. 另外,如...

台江县14787741846: java中字符串和字符数组的区别 -
羽劳荷叶: 1、字符串是类,字符数组是数组.(数组和类的区别就不用我说了吧)2、字符数组是char类型的,字符串是String类型的3、两者之间的相互转化:String s="this is a string"; char[ ] c={'t','h','i','s','i','s','a','c','h','a','r'}; 字符串转换为字符数组 char[ ] ch=s.toCharArray(); 字符数组转化为字符串 String str=string.valueOf(c);

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网