数组与字符串
- 格式:ppt
- 大小:326.50 KB
- 文档页数:94
字符数组与字符串<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++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中数组与字符串的常⽤⽅法整理。
数组⽅法: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基础知识 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有什么区别?==:是运算符,⽤于⽐较两个变量是否相等。
字符串和字符数组的区别字符串和字符数组的区别和联系: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函数。
字符数组与字符串的转化字符数组和字符串是两种不同的数据类型,但它们之间可以进行相互转化。
字符数组是由一组字符构成的一维数组,例如: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'字符。
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字符串和数组常⽤⽅法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中数组和字符串的⽅法⼤全 数组的⽅法很多,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()定义:创建并返回⼀个新数组。