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

数组跟字符串有什么联系和区别,字符数组和数值型数组在输入和输出时有什么联系和区别,请高手将详细一些。谢谢!
难道说数值型数组只有转换成字符型数组才能输出吗?
那么这样的话,下面的算法是错误的了:
main(){
int d[]={1,3,4,5,6};
for(int i=0;i<=4;i++)
printf("%d",d);}

简单点说:
数组是一段连续的内存,而字符串也是一串连续的内存,所以字符数组和字符串很大程度上有共同的性子,比如:
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个回答  2010-10-10
1.数组是集合结构,用于存储一组数据,是内存中具有连续性的数据结构;字符串是若干个字符(char)组成的序列。两者没有任何联系。

2.字符数组(string[])可以直接输出,因为string是输出的基本单元。而数值型数组(int[])需要转换格式,将int转换为string后才能输出。
第2个回答  2010-10-10
甲壳虫技术论坛 是你学习的好地方

相关了解……

你可能感兴趣的内容

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