数组与字符串
字符数组和字符串
输入数字输出字符
scanf("%d",&n); cout<<char(n);
字符数组
✓ 什么是字符数组 ✓ 声明字符数组 ✓ 初始化字符数组
✓ 访问字符数组元素 ✓ 字符数组使用
字符数组
初始值表中的每个数据项是一个字符,用字符给数组chr1的各个元素 初始化。当初始值个数少于元素个数时,从首元素开始赋值,剩余元素 默认为空字符。要使用单引号包裹起来。
char a[1000]; scanf(“%s”,a);
printf(“%s”,a);
输入
输出
字符串使用
截取字符串一部分输出:
char a[1000]; scanf(“%s”,a); for(int i=2;i<=5;i++){
printf("%c",a[i]); }
printf("%c",(a[i]-'a'+n)%26+'a');
char a[1000]; scanf(“%s”,a);
printf(“%s”,a);
输入
输出
字符串使用
字符串的输入与输出 字符串可以作为一维字符数组来处理。本节仅介绍将字符串作为一个整 体进行输入和输出的语句。 (1)输入 从键盘输入一个字符数组可以使用scanf语句或gets语句。 1) scanf语句 格式:scanf(“%s”,字符数组名称); 遇到空格和回车自动停止,不能读取空格和回车。在字符数组的末尾会 自动添加‘\0’作为结束标志。
a bc
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8]a[9]
c语言字符数组与字符串总结
字符数组与字符串<1>定义Char数组名[常量表达式]数组中每一个元素的值为一个字符。
系统在内存为字符数组分配若干连续的存储单元,每个储存单元为一个字节。
<2>初始化逐个元素初始化,如char c[8]={‘b’,’o’,’y’};(要记得加单引号)用字符串初始化,如char c[11]={“I am a boy”};初始化后在末尾自动添加’0’如果初值个数<数组长度,则只将这些字符赋给数组中前面元素,其余元素自动定为空字符(即’0’)<3>输入输出①用格式”%c”逐个输入输出,如scanf(“%c”,&a[0]);②用格式符”%s”整个字符串输入输出,如scanf(“%s”,a)用”%s”格式输出字符数组时,遇’\0’结束输出,且输出字符中不含’\0’,用scanf及”%s”输入时,数组名前不能再加”&”符号。
字符串的末尾必须有’\0’字符,且字符串只能存放在字符数组中。
scanf中%s输入时遇空格或回车结束。
③用函数gets实现输入gets(字符数组),如gets(a)调用函数时,回车键作为输入结束标志;然后将接收到的字符依次赋给数组各个元素,并自动在字符串末尾加字符串结束标记’\0’④用字符串输出函数puts实现输出puts(字符串/字符数组),如puts(a);输出一个字符串,并在输出后自动换行。
<4>字符串处理函数①字符串拷贝函数格式strcpy(字符数组1,字符串2)将字符串2拷贝到字符数组1中去,要求字符数组1必须足够大,拷贝时’\0’一同拷贝,不能使用赋值语句为一个字符数组赋值。
字符数组1应写成数组名的形式,比如char a[0]; strcpy(a,…)②字符串连接函数格式strcat(字符数组1,字符数组2)将字符数组2连到字符数组1后面,要求字符数组1必须足够大,连接前,两串均以’\0’结束;连接后,串1的’0’取消,新串最后加’\0’。
关于字符数组和字符串比较C++
关于字符数组和字符串⽐较C++char acStr[] = "aaaaa";//这个是字符数组,只含有5个字符char *pcStr = "aaaaa";//这个是字符串,含有6个字符,即5个a加⼀个结束符'\0'输出的结果 strlen()长度都是5,所以即便是字符串,最后取长度的时候,也不考虑\0: strlen()计算字符串长度,忽略结束符 \0char *p = "hello";char *q = "world";char o[] = "hello";cout<<"hello"<<strlen(p)<<endl; //5cout<<"world"<<strlen(q)<<endl; //5cout<<"o[]"<<strlen(o)<<endl; //5cout<<strlen("hello")<<endl; //51. 字符串实际要⽐字符数组多⼀个空间⽤来存放结束符 \0char *p = "hello";char *q = "world"; //⽐如world实际上存放了6个字符位, 5个字符+'\0'但是求长度,返回的值仍然是5:并不考虑结束符\0的位cout<<"hello"<<strlen(p)<<endl;cout<<"world"<<strlen(q)<<endl;2. 字符数组是不⽤存放\0位的,所以分配的字符位数只要给 strlen(p)就⾏了,不需要+1:a[0] = new char[strlen(p)];a[1] = new char[strlen(q)];⽤字符数组和字符指针变量都可实现字符串的存储和运算。
js中数组与字符串的常用方法整理。
js中数组与字符串的常⽤⽅法整理。
数组⽅法:pop() 、push() 、shift() 、unshift() 、 reverse() 、 sort() 、 splice() 会改变原数组⽅法名对应版本功能原数组是否改变concat()ES5-合并数组,并返回合并之后的数据njoin()ES5-使⽤分隔符,将数组转为字符串并返回npop()ES5-删除最后⼀位,并返回删除的数据yshift()ES5-删除第⼀位,并返回删除的数据yunshift()ES5-在第⼀位新增⼀或多个数据,返回长度ypush()ES5-在最后⼀位新增⼀或多个数据,返回长度yreverse()ES5-反转数组,返回结果yslice()ES5-截取指定位置的数组,并返回nsort()ES5-排序(字符规则),返回结果ysplice()ES5-删除指定位置,并替换,返回删除的数据ytoString()ES5-直接转为字符串,并返回nvalueOf()ES5-返回数组对象的原始值nindexOf()ES5查询并返回数据的索引nlastIndexOf()ES5反向查询并返回数据的索引nforEach()ES5参数为回调函数,会遍历数组所有的项,回调函数接受三个参数,分别为value,index,self;forEach没有返回值nmap()ES5同forEach,同时回调函数返回数据,组成新数组由map返回nfilter()ES5同forEach,同时回调函数返回布尔值,为true的数据组成新数组由filter返回nevery()ES5同forEach,同时回调函数返回布尔值,全部为true,由every返回true nsome()ES5同forEach,同时回调函数返回布尔值,只要由⼀个为true,由some返回true nreduce()ES5归并,同forEach,迭代数组的所有项,并构建⼀个最终值,由reduce返回n reduceRight()ES5反向归并,同forEach,迭代数组的所有项,并构建⼀个最终值,由reduceRight返回n详解:1. concat() : 合并数组,可以合并⼀个或多个数组,会返回合并数组之后的数据,不会改变原来的数组;var str1 = [12,2,"hello"];var str2 = ["world"];console.log(str1.concat(str2)); //[12, 2, "hello", "world"]console.log(str1); //[12,2,"hello"];2. join() : 将数组转为字符串并返回转化的字符串数据,不会改变原来的数组;注意:()中⽤双引号包括⾃⼰想⽤的分隔符,默认为逗号,这⾥⽅便观察,我⽤了-var str1 = [12,2,"hello"];var str2 = ["world"]; console.log(str1.join("-")); //12-2-hello console.log(str1) //[12, 2, "hello"]3. pop() : 删除数组的最后⼀位,并且返回删除的数据,会改变原来的数组var str1 = [12,2,"hello"];console.log(str1.pop() //helloconsole.log(str1); //[12, 2]4.push() : 在数组的最后⼀位新增⼀个或多个数据,并且返回新数组的长度,会改变原来的数组var str1 = [12,2,"hello"];var str2 = [43,2,"test"];console.log(str1.push("你好")); //4console.log(str2.push("hello","world")); //5console.log(str1); //[12, 2, "hello","你好"]console.log(str2); //[43, 2, "test","hello", "world"]5. shift () :删除数组的第⼀位数据,并且返回新数组的长度,会改变原来的数组var str1 = [12,2,"hello"];console.log(str1.shift()); //12console.log(str1); //[2,"hello"]6. unshift() :在数组的⾸位新增⼀个或多数据,并且返回新数组的长度,会改变原来的数组注意:unshift()⽅法返回的数据是新数组的长度,它增加的数据可以是⼀个也可以是多个,可以理解为增加⼀连串的数据,var str1 = [12,2,"hello"];var str2 = [43,2,"test"];console.log(str1.unshift("你好")); //4console.log(str2.unshift("hello","world")); //5console.log(str1); //["你好", 12, 2, "hello"]console.log(str2); //["hello", "world", 43, 2, "test"]7. reverse() :将数组的数据进⾏反转,并且返回反转后的数组,会改变原数组。
Java字符串与数组
Java字符串与数组问题及答案来源⾃《Java程序员⾯试笔试宝典》第四章 Java基础知识 4.5字符串与数组1、字符串创建与存储的机制是什么?Java中字符串声明与初始化主要有两种情况:(1)String s1 = new String("abc")与String s2 = new String("abc")语句执⾏String s1 = new String("abc")语句,字符串池中不存在"abc",则会创建⼀个字符串常量"abc",并将它添加到字符串常量池中,然后new String()会在堆中创建⼀个新的对象,s1指向堆中的String对象紧接着创建String s2 = new String("abc")语句,因为字符串常量池中已经有了字符串常量"abc",所以不会再创建"abc",直接new String()在堆中创建⼀个新的对象,然后使⽤s2指向这个对象s1与s2指向堆中的不同String对象,地址⾃然也不相同(2)String s1 = "abc"语句与String s2 = "abc"语句在JVM中存在着⼀个字符串常量池,其中保存了着很多String 对象,s1,s2引⽤的是同⼀个常量池中的对象。
当创建⼀个字符串常量时,例如String s1 = "abc",会⾸先在字符串常量池中查找是否已经有相同的字符串被定义,若已经定义,则直接获取对其的引⽤,此时不需要创建字符串常量"abc",如果没有定义,则⾸先创建字符串常量"abc",然后把它加⼊到字符串池中,再将引⽤返回例⼦1:String s1 = new String("abc"); // 先查找常量区有⽆"abc"常量,若⽆则将其"abc"添加到常量区,再在堆中创建对象,将s1指向堆中的对象String s2 = new String("abc"); // 发现在常量区已经有了"abc",在堆中创建对象,将s2指向堆中的对象例⼦2:String s1 = "abc"; // 在常量区⾥⾯创建⼀个"abc"字符串对象,s1获取对其的引⽤String s2 = "abc"; // 发现在常量区已经有了"abc",s2直接获取对其的引⽤引申 - 对于String类型的变量s,赋值语句s=null和赋值语句s=""有什么区别?s=null,是指s不指向任何⼀个字符串;s=""中的s指向空字符串笔试题 - new String("abc")创建了⼏个对象?⼀个或两个,如果常量池中原来就有"abc",那么只创建⼀个对象,否则创建两个对象2、==、equals和hashCode有什么区别?==:是运算符,⽤于⽐较两个变量是否相等。
ch4_数组与字符串
23
例4-2 字符串的输入与输出
输入和输出
Please input a name with blank(within 19 characters): I understand Please input the name again(using the operater >>): I understand
3
4.1.1 一维数组
1、一维数组的定义格式 int n=10; 类型说明符 数组名[常量表达式] int a[n]; 2、说明 (1) 数组名命名规则和变量名相同。 (2) 数组名后用方括弧括起来的常量表达式表示下标长度 (3) C语言的下标从0开始,必须是整型变量或常量。 (4) 数组在内存中存储时,按下标递增的顺序连续存储各元素。 例如: int array[10]; 表示数组名为array,有10个元素 但 int array[];//是不允许的。
10
二维数组存储结构
逻辑结构: 二维数组恰似一张表格(或矩阵)。数组元素 中的第一个下标值表示该元素在表格中的行号, 第二个下标为列号。 M[3][3]具有如下逻辑结 构: M[0][0] M[0][1] M[0][2] M[1][0] M[1][1] M[1][2] M[2][0] M[2][1] M[2][2]
4.1数组
数据类型
(1)基本类型:整型、字符型、实型
(2)构造类型:
由基本类型数据按一定规则组成的,包括数组、结构体、 共用体
0
国家级精品课程网站
(本书配套教学网站)
4.1数组
对于有些数据,只用简单的数据类型是不够的, 难以反映出数据的特点,也难以有效地进行处理。 问题: 如果有1000名学生,每个学生有一个成绩,需
字符串和字符数组的区别
字符串和字符数组的区别字符串和字符数组的区别和联系:c语⾔的字符串由C的字符数组变形⽽成,末尾加上'\0'字符串⽐字符数组多⼀个'\0'#include<iostream>using namespace std;int main(){//没有存储结束符的话就不是字符串,就是⼀个字符数组(单纯的字符数组)//字符数组char a[3]={'1','2','3'} ;//字符串char a[3]={'1','2','\0'} ;return 0;}联系:都是⼀数组形式存储数据,字符之间地址连续,可以⽤下标来访问,同样的数据如果以字符数组和字符串存储⼤⼩有区别,字符串⽐字符数组⼤⼀个'\0',字符串常⽤的操作函数:strlen/strcpy/strcmp/sprintf/ strcat/strstr/strdup以及strncpy/strncmp/snprintf/strncat这些带n的函数strlen :字符串长度strcmp :字符串⽐较strcpy :字符串拷贝strcat :字符串拼接#include<iostream>#include<stdlib.h>#include<string>#include <assert.h>using namespace std;//连接字符串被copy的要⽤constchar *my_strcat(char *d, const char *t){char *address = d;while (*d != '\0') //将原字符串指针移到最后⼀个字符d++;while ((*d++ = *t++) != '\0') //开始复制NULL;return address; //返回指针}//字符串的复制同样被复制的为了安全要⽤constchar *my_strcpy(char *d,const char *t){char *str = d;while (*t != '\0'){*d = *t;d++,t++;}//复制到结束为 \0return str;}//从第n个字符开始复制char *my_strncpy(char *dest, char *t, int n){char *str = dest; //⽤指针str来操作while (n&&*t != '\0') {*dest = *t;++*dest, ++*t;n--;}return str;}//⼩写转⼤写char *my_strup(char *dest){char *str = dest;while (*dest != '\0'){ //判断是否输的确实是⼩写if (*dest >= 'a' && *dest <= 'z')*dest -= 32;dest++;}return str;}//⼤写转⼩写char *my_strlwr(char *dest){char *str = dest;while (*dest != '\0'){ //判断是否输的为⼤写if (*dest >= 'A' && *dest <= 'Z')*dest += 32;dest++;}return str;}//⽐较字符⽐较⼤⼩被⽐较的字符串都要⽤使⽤constint my_strcmp(const char *s1, const char * s2){while (*s1&&*s2&&*s1 == *s2){s1++;s2++;}return (*s1 - *s2);//如果相等返回0 ⼤于返回正⼩于返回负}int main(){char a[100],b[100];cin >>a>> b;char *p1 = a, *p2 = b;//连接字符串//cin >> a >> b;//my_strcat(p1, p2);//把b复制到a//my_strcpy(p1, p2);//从第n开始复制//my_strncpy(p1, p2, 2);//cin >> b;//cout << my_strcmp(p1, p2);//⼩写转⼤写⼤写转⼩写//cin >> a;//my_strup(p1);//cout << a<<endl;//my_strlwr(p1);//cout << a << endl;cout<<my_strcmp(a, b)<<endl;system("pause");return 0;}strdup与strcpy函数和功能描述:①extern char *strdup(char *s);头⽂件:string.h功能: 将串拷贝到新建的位置处说明:strdup不是标准的c函数。
第4章:数组和字符串
4.1.1一维数组
2. 创建一维数组
创建一维数组就是为数组分配存储空间,需指定数组长度。 数组创建后,数组名就标识用于存储数组元素的存储空间(引用)。 创建一维数组的3种方法:
(1) 先声明后创建
数组元素类型 数组名[]; 数组名 = new 数组元素类型[元素个数] ; 如:int intArray []; intArray = new int[5];4.2.3 字符串基本操作
字符串比较的注意事项:
表达式 str1.equals(str2)与表达式 str1==str2 的差异 在于:
• 前者表示所引用的两个字符串的内容是否相同, • 后者表示str1 与 str2是否引用同一个对象。 【实战编程技巧:如何避免潜在的空指针异常】
练习题
4.1 数组
4.2 字符串
4.1 数组
数组是将一组相同类型的数据顺序存储,组成的一 种复合数据类型。 数组的特点:
数组中的所有元素的数据类型相同。 数组中的元素连续顺序存储。 数组中每个元素按存储顺序对应一个下标,下标从0开始顺序编号 ,引用数组元素通过数组名和它的下标确定。 数组有一维数组和多维数组之分,数组元素的下标个数确定数组的 维数。
练习题
【真题练习】设有数组a和b的定义如下: int[]a={1,2,3}; int[]b={4,5,6} …… 执行以下代码“a=b;”,除了完成赋值操作之外,引起 系统额外要做的工作是_________。
字符数组与字符串的转化
字符数组与字符串的转化字符数组和字符串是两种不同的数据类型,但它们之间可以进行相互转化。
字符数组是由一组字符构成的一维数组,例如:char arr[] = {'h', 'e', 'l', 'l', 'o'};而字符串是由一组字符构成的字符序列,以'0'(空字符)作为结尾,例如:char str[] = 'hello';可以通过以下方式将字符数组转化为字符串:1. 使用字符串赋值语句,例如:char arr[] = {'h', 'e', 'l', 'l', 'o'};char str[6];strcpy(str, arr);2. 手动添加'0'字符,例如:char arr[] = {'h', 'e', 'l', 'l', 'o'};char str[6];for(int i=0; i<5; i++){str[i] = arr[i];}str[5] = '0';可以通过以下方式将字符串转化为字符数组:1. 使用字符数组赋值语句,例如:char arr[6];char str[] = 'hello';strcpy(arr, str);2. 手动去除'0'字符,例如:char arr[6];char str[] = 'hello';for(int i=0; i<5; i++){arr[i] = str[i];}arr[5] = '0';需要注意的是,当字符数组和字符串长度不同时,需要考虑字符数组的大小是否足够,以及是否需要手动添加或去除'0'字符。
Java语言程序设计第6章_数组与字符串
6.3.3 正则表达式中的限定符
▪ 在使用正则表达式时,如果需要某一类型的元字符多次输出, 逐个输入就相当麻烦,这时可以使用正则表达式的限定元字 符来重复次数。
例如:
regex=”hello[246]?” 那么”hello”、”hello2”、 ”hello4”、 ”hello6”都是与 regex匹配的字符串。
以上构造方法中,使用最多的是第2个,如:
String s = new String(“Hello World“);
字符数组要转化为字符串可以利用第3个构造方法。例如:
Char[] helloArray={‘h’,’e’,’l’,’l’,’o’}; String s = new String(helloArray);
▪ 二维数组的元素是一维数组,因此,初始化时也可允许各行单 独进行。Java的二维数组允许各行有不同的元素个数。例如:
▪ double score[][]; ▪ score = new double[3][]; ▪ score[0] = new double[3]; ▪ score[1] = new double[2]; ▪ score[2] = new double[4];
▪ public String (String s); //用已有字符串创建新的String。
▪ public String (StringBuffer buf) ; //用StringBuffer对 象的内容初始化新String。
▪ public String (char value[]); //用已有字符数组初始 化新String。
double score [] []={{56.8,42.5,96.8};{100,78},{99,63,78,45}}
电大C语言程序设计 第4章 数组和字符串
Байду номын сангаас
第4章 数组和字符串 4.4 使用typedef语句定义数组类型 2. 二维数组类型的定义语句 格式: typedef <元素类型关键字> <数组类型名> [<常量表达式1>] [<常 量表达式2>]; 格式举例: (1) typedef int Matrix[5][5]; (2) typedef char nameTable[10][NN]; (3) typedef double DataType[M+1][N+1]; 定义对象: (1) Matrix mx={{0}}; (2) nameTable nt={""}; (3) DataType dd={{0.0}};
第4章 数组和字符串 4.2 一维数组 3. 数组元素访问 数组元素可以象普通变量一样使用。如: (1) int a[5]={0,1,2,3,8}; (2) a[0]=4; (3) a[1]+=a[0]; (4) a[3]=3*a[2]+1; (5) printf("%d",a[a[0]]);
第4章 数组和字符串 4.1 数组的概念 一维数组可以表示和存储和一维相关的数据。 二维数组可以表示和存储和二维相关的数据。 三维数组可以表示和存储和三维相关的数据。 假定一个数列为a1,a2,…,an,可以用一维数组来 存储。一个矩阵可以用二维数组来存储。
第4章 数组和字符串 4.2 一维数组 1. 定义格式 <类型关键字><数组名>[<常量表达式>][={<初 值表>}] <类型关键字>:已存在的一种数据类型。 <数组名>:用户定义的标识符。 <常量表达式>只能含有通过#define命令定义的 符号常量,不能含有通过const语句定义的符号 常量,初值表为用逗号分开的一组表达式。
Python实现字符串与数组相互转换功能示例
Python实现字符串与数组相互转换功能示例字符串转数组的示例代码如下:
```python
#字符串转数组
string = "1,2,3,4,5" # 假设字符串中的元素以逗号分隔
array = string.split(",") # 使用split(方法根据逗号分隔字符串,并返回一个列表
array = [int(x) for x in array] # 将字符串列表中的元素转换为整型
print(array)
```
数组转字符串的示例代码如下:
```python
#数组转字符串
array = [1, 2, 3, 4, 5]
string = ",".join(str(x) for x in array) # 使用join(方法将数组中的元素连接为一个字符串,并使用逗号分隔
print(string)
```
以上为将字符串转换为数组和将数组转换为字符串的示例代码,根据具体的需求和字符串的格式,可以自行调整代码实现。
将字符串读入数组的方法
将字符串读入数组的方法在计算机编程中,字符串是一种基本的数据类型,而数组则是用来存储一系列相同类型数据的容器。
在某些情况下,我们需要将一个字符串读入到一个数组中。
这可能是因为我们需要对字符串进行特定的操作,例如搜索、替换或排序。
本文将介绍几种常见的将字符串读入数组的方法。
1. 使用字符数组:这是最简单也是最常见的方法。
我们创建一个字符数组,并使用循环结构将字符串中的每个字符逐个复制到数组中。
以下是一个简单的Java示例:```javaString str = "Hello, World!";char[] charArray = new char[str.length()];for (int i = 0; i < str.length(); i++) {charArray[i] = str.charAt(i);}```2. 使用split()函数:在许多编程语言中,如Java和Python,都有内置的split()函数可以将字符串分割成数组。
这个函数会根据指定的分隔符将字符串分割成多个子串,并将这些子串存储在一个数组中。
以下是一个Java示例:```javaString str = "Hello, World!";String[] strArray = str.split(",");```3. 使用toCharArray()函数:在Java中,我们可以直接使用String类的toCharArray()函数将字符串转换为字符数组。
以下是一个简单的示例:```javaString str = "Hello, World!";char[] charArray = str.toCharArray();```4. 使用ArrayList或者Vector:在一些高级编程语言中,如Java和C#,提供了动态数组的数据结构,如ArrayList和Vector。
JS字符串和数组常用方法
JS字符串和数组常⽤⽅法1、indexOf() – 返回字符串中⼀个字符第⼀处出现的索引,接收2个参数:要查找的字符,从哪个位置开始查找;。
lastIndexOf()--返回字符串中某⼀个字符最后⼀次出现的索引值。
如果没有匹配项,返回 -1 。
找到字符串中某⼀字符串出现的所有位置:var str = "abocdoefo";function index(ele,attr){var index = -1,arr=[];do{index = ele.indexOf(attr,index+1);arr.push(index);}while(index != -1);return arr.splice(0,arr.length-1);};console.log(index(str,"o"));2、charAt() – 返回指定位置的字符(适⽤于现代浏览器),str()适⽤于IE8及以下版本浏览器,等同于charAt()。
3、slice() --截取字符串,接受两个参数:strt,end,从strt位置开始截取,截取到end位置,end位置截取不到。
4、substring()--截取字符串,接受两个参数:strt,end,从strt位置开始截取,截取到end位置,end位置截取不到。
5、substr()-- 截取数组,接受两个参数:strt,n,从strt位置开始截取,截取n个字符。
6、split()-- 将字符以特定的⽅式切割成字符数组。
7、replace()--字符替换。
接收2个参数:要替换的字符,替换的字符;只能替换符合规则的第⼀个字符。
替换所有的字符:var str = "abocdoefo";//把字符串中所有的“o”替换成“!”function repl(str,attr,el){while(str.indexOf(attr) !== -1){str = str.replace(attr,el);};return str;};console.log(repl(str,"o","!"));8、trim()--去除字符串两端空格。
JS中数组和字符串的方法大全
JS中数组和字符串的⽅法⼤全 数组的⽅法很多,ECMScript5⼜提供了好⼏种⽅法。
有空把之前的云上的笔记整理了⼀下,⽅便⾃⼰以后查找使⽤。
⼀、ECMScript 3的Array.prototype中定义的⽅法1、join()定义:将数组中所有的元素都转化为字符串拼接在⼀起,返回最后⽣成的字符串。
注意:不改变原数组var a = [1,2,3];console.log(a.join()); //1,2,3 默认使⽤逗号分隔console.log(a.join("")); //123 转化为字符串的常⽤⽅法console.log(a.join("-")); //1-2-3 ⾃定义分隔符console.log(a); //[1,2,3] 不修改原素组var b = new Array(5);console.log(b.join('*')); //**** 4个连字号组成字符串2、reverse()定义:将数组中的元素颠倒顺序,返回逆序的字符串。
注意:原数组被改变var a2=[1,2,3];console.log(a2.reverse()); //[3,2,1]console.log(a2); //[3,2,1]原数组被修改console.log(a2.reverse().join()); //1,2,3 因为原数组⼜被修改了3、sort()定义:将数组中的元素排序后返回排序后的数组、注意:数组以字母表顺序排。
原数组被改变可以⾃定义按⾮字母的顺序排序,只要个sort()传⼊⼀个⽐较的匿名的⽐较函数可以了。
该⽐较函数决定了两个参数的在排好数组中的先后顺序,加⼊第⼀个参数在前,返回⼩于0的值,反之。
相等为0。
var a3=['c','b',undefined,'a','z'];console.log(a3.sort()); //["a", "b", "c", "z", undefined],undefined被排到最后console.log(a3); //["a", "b", "c", "z", undefined]修改原数组//⾃定义排序规则var a4 = [33,4,1111,2222];//console.log(a4.sort()); //[1111, 2222, 33, 4] 默认排序a4.sort(function(a,b){return a-b;});console.log(a4); //[4, 33, 1111, 2222]4、concat()定义:创建并返回⼀个新数组。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数组与字符串
13
4. 一维数组的输入、输出 1) 指定元素I/O:
scanf(”%d%d%d%d%d”, &a[0], &a[1], &a[2], &a[3], &a[4]); printf(”%d,%d,%d,%d,%d\n”, a[0], a[1], a[2], a[3], a[4]);
printf("a=%d\n", a); } 运行结果:a=1534
4
main() /*用for循环*/ { int i, a;
for(i=10, a=1; i>1; i--) a=2*(a+1);
printf("a=%d\n", a); }
数组与字符串
5
概述 C数据类型: 基本类型——整型、实型、字符型; 构造类型——数组、结构体、共用体;
1
第五章 数组与字符串
5. 1 一维数组 5. 2 二维数组 5. 3 字符串处理
数组与字符串
2
1994年的微软电子百科全书(Microsoft Encarta) 的一篇数学论文中这样说道:“如果a,b,c都是整 数并且a=bc,那么我们称a是b和c的倍数,b和c是a 的约数或因数。如果c不是+1或-1,b就被称之为a 的一个真因数。包括0在内的所有偶数,都是2的 倍数,比如-4,0,2,10;非偶的数称之为奇数,比如 -5,1,3,9。如果一个正整数等于它的所有正真因数 的和,我们称这个数为一个完数(perfect)。例如: 6=1+2+3;28=1+2+4+7+14,所以6和28都是完数。 不是完数的正整数分为亏数(deficient)和冗数 (abundant),依据这个数的所有真因数的和与其本 身的大小来划分。因此,9是亏数因为9>1+3;而 12是冗数因为12<1+2+3+4+6。”
采用数组的意义: 数组的下标可由变量来控制使其有规律地变
化,这就使得对于一组相关数据的处理比采用多 个简单变量更为简便和有效。
数组与字符串
7
5. 1 一维数组
1. 一维数组的定义 一般形式: 类型标识符 数组名[常量表达式]
数组说明
指定数组元素个数; 形式:整常数、
符号常量
命名方法同变量,但不能重名;
说明元素类型;
例:int a[5]; 定义了长度为5的一维整型数组a;
数组与字符串
8
2. 一维数组的引用 引用单位:数组元素;或称为下标变量; 引用形式:数组名[下标 ] 其中:数组名指明要引用的数组;
下标指明要引用元素的标号; 下标形式:常量、变量、表达式; 下标取值:0、1、2 … (数组长度-1)
10
a[2]
按由小到大的下标顺序 1006
20
a[3]
a数组存储长度:
1008
21
a[4]
2×5=10byte
┇
数组与字符串
11
说明:
1) 一维数组的指针
2)
即数组一维数组元素的地址(指针) 引用数组元素时,各元素的地址是由数组起始
地址及下标换算得出。
如:a[2] 其中[ ]是下标运算符,1级;
请你写一个程序来判断读入的数是完数,亏数还 是冗数。
数组与字符串
3
“猴子吃桃”问题。猴子第一天摘下若干个 桃 子,当即吃了一半,还多吃了一个。第二天又 将 剩下的桃子吃掉一半,又多吃了一个。以 后每天都 吃前一天剩下的一半零一个。到第 十天想吃时,见 只剩下一个桃子。求第一天 共摘了多少个桃子。
数组与字符串
9
例:数组元素的引用和赋值
int i, a[5];
/*数组、简单变量可同时定义*/
i=2;
a[0]=5;
/*给数组元素赋值*/
a[1]=a[2]=10;
a[3]=a[i]*2;
/*引用a[i]的值参与运算*/
a[i*2]=a[i+1]+a[0]%i;
/*表达式作为下标*/
printf(“%d,%d,%d,%d,%d\n”,
基本类型的特点: 每个基本类型都是不可再分割的量,基本类
型的变量在定义、存储、含义上都是独立的。
构造类型的特点: 每种构造类型都是由若干基本类型的量按一
定规则组织而成。
数组与字符串
6
数组的构成: 数组是同类型相关数据的集合;其中每个量
称为数组元素,数组元素是访问数组的基本单位。
数组元素的表示: 用数组名及下标来表示; a[0]、a[1]、a[2]、a[3]、a[4] …
a[2]的地址:a+类型长×下标=1000+2×2=1004
表示:&a[2]
数组与字符串
12
3) 应避免下标越界,因调试的各阶段对下标越界不 做检查,越界将造成麻烦。
例如:有定义 int a[5]; 若:sum=sum+a[8];
将在1000+2×8=1016中引用一毫无意义的值;
若:a[5]=100; 将100存入1000+2×5=1010中,可能破坏程
2) 利用循环控制下标变化实现I/O:
int a[100], i; for(i=0; i<100; i++)
scanf(”%d,”, &a[i]); for(i=0; i<100; i++)
printf(”%d,”, a[i]);
/*下标变化:0~99*/
数组与字符串
14
例:将一维数组各元素顺序输出、倒序输出、选偶 数项输出。
a[0], a[1], a[2] , a[3], a[4]);
5,10,10,20,21
数组与字符串
10
3. 一维数组的存储
编译系统为定义的数组分配连续的存储区间; 该区间字节数:元素类型长×元素个数
例:int a[5];
┇
数组a的指针→1000
5
a[0]
1002
10
a[1]
各元素存储顺序:
1004
int a[100], i; for( i=0; i<100; i++) a[i]=i+1; for(i=0; i<100; i++) { if( i%10==0) printf(“\n”);
printf(”%-5d”, a[i]); } for(i=99; i>=0; i--)
这是个“倒推”问题。 设:第n天的桃子数为Xn,它前一天的桃子数为
Xn-1 则: Xn=Xn-1/2-1 可得到:Xn-1=2(Xn+1) 已知:X10=1
数组与字符串
main() /*用while循环*/ { int i, a;
i=10; a=1; while (i>1)
{ a=2*(a+1); i--; }