String数组的定义和赋值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了String数组的定义和赋值相关的知识,希望对你有一定的参考价值。
//下面的代码哪里错了?
String[] name=new String[2];
name[0]="human";
name[1]="tree";
类内的所有东西除了声明属性跟方法,其他东西都要放在大括号内——可以声明的同时赋值如:String[] name = "human","tree"
或者把赋值语句放到大括号里
String[] name=new String[2];
name[0]="human";
name[1]="tree";
这样写就对了。。。。。。(但不建议这样) 参考技术A 怎么会错? 参考技术B 数组基本语法
了解了数组的概念以后,下面来看一下数组的语法格式。数组的语法格式主要有四种:数组声明、数组初始化、引用数组元素和获得数组长度。
1 数组声明
和变量类似,数组在使用以前也必须声明,数组的声明语法格式为:
数据类型 数组名称[]
或:数据类型[] 数组名称
例如:
int m[];
char c[];
double d[];
这里的数据类型可以是Java语言的任意数据类型,也就是说既可以是基本数据类型也可以是复合数据类型。在声明数组时使用一对中括号,该对中括号既可以放在数据类型的后面,也可以放在数组名称的后面。数组名称是一个标识符,可以根据需要设置其名称,在程序中使用该名称代表该数组。
这两种声明的语法格式在实际使用时完全等价,可以根据习惯进行使用。
数组声明以后在内存中不占用空间,没有地址,由于数组是复合数据类型,所以声明完成以后其默认值是null.数组声明以后不能直接使用,必须对其初始化以后才可以进行使用。
2 数组初始化
数组初始化就是对数组进行赋值。数组的初始化语法分为两种:静态初始化和动态初始化。静态初始化适用于已知数组所有元素的值,一次初始化所有元素,动态初始化只申请空间,每个元素的值是数组声明时数据类型对应的初始值。
2.1 静态初始化
静态初始化,也称数组的整体赋值,是一次为数组中所有元素依次进行赋值的语法,通过可以语法可以指定数组中每个元素的值,同时也指定了数组的长度。
语法格式为:
数据类型[] 数组名称 = 值1,值2,……,值n;
例如:
int[] m = 1,2,3,4;
char c[] = ‘a’,‘f’,‘d’;
静态初始化必须和数组的声明位于同一行,换句话说,只能在声明数组的同时进行静态初始化。数组中的所有元素书写一对大括号的内部,系统按照值的书写顺序依次为数组运算进行赋值,例如数组m,则将1赋值给m数组的第一个元素,2赋值给m数组的第二个元素,依次类推,数组的总长度等于静态初始化时数值的个数。在实际书写时,需要注意,值的类型必须和数组声明时的类型匹配,或者可以自动进行转换。
在实际程序中,静态初始化一般书写一组已知的无规律数值,这样书写起来比较简单,格式比较统一。
2.2 动态初始化
动态初始化,也就是只为数组指定长度,并且在内存中申请空间。动态初始化可以不必和数组的声明放在一起,也可以重新初始化一个初始化的数组。
动态初始化的语法格式:数据类型[] 数组名称 = new 数据类型[长度];例如:
int[] m = new int[10];
char[] c;
n = new char[3];
Examda提示: 动态初始化使用new关键字进行初始化,new关键字后续的数据类型要求和数组声明时的数据类型一样,中括号内部是需要初始化的数组长度,该长度值可以是数字也可以是整型变量,如果是整型变量则不能为long型。在实际使用时,也可以先声明再进行动态初始化。
动态初始化指定了数组的长度,在内存中申请了对应长度的空间,而每个元素的值取数组数据类型对应的默认值。默认值的规定如下:a、 boolean类型的默认值是false. b、 其它7种基本数据类型是0.说明:char的默认值是编码为0的字符,而不是字符0.
3 引用数组元素
数组是一组数的集合,在实际使用时还需要引用数组中的每个元素。则引用数组中元素的语法格式为:数组名称[下标]其中下标指数组中每个元素的索引值,Java语法规定数组中的第一个元素索引值是0,第二个是1,依次类推。在程序书写时,下标位置既可以书写常数也可以书写变量。而整个引用元素的表达式可以看作是一个变量,该变量的类型和数组的类型一致。
示例代码如下:int[] m = 3,2,4,6;m[1] = 4;m[2] = m[3] + m[0];在代码中,可以使用变量作为下标,示例代码如下:char[] ch = new char[10];int i = 2;ch[i] = ‘a’;使用变量作为数组的下标,极大的增强了数组元素使用的灵活性,也是灵活使用数组必须深刻理解的内容。
因为数组的下标都从0开始,所以有效氖�橄卤昵�涫?到数组的长度减1,其它的下标都是非法的。在代码中出现非法的下标不会出现语法错误,但是会导致运行时出现异常。
4 获得数组长度
为了方便的操作数组,Java语法中提供了获得数组长度的语法格式。对于一个已经初始化完成的数组,获得该数组长度的语法格式为:数组名称。length示例代码如下:
int[] n = 1,2,3,4,6;
int len = n.length;
则在该代码中n.length代表数组n的长度,由数组的初始化可以看出数组n的长度是5,则变量len的值将是5.使用该语法,可以只需要知道数组的名称就可以获得数组的长度,便于灵活操作数组。
综合前面下标的语法和长度的语法,则输出数组n中所有元素的代码为:
for(int i = 0;i < len;i++)
System.out.println(n[i]);
这种使用数组的方式称作数组的遍历,遍历数组是使用数组的基础,也是很多和数组相关逻辑实现的基础。
关于数组的语法就介绍这么,下面通过一些示例来演示数组的实际使用。
综上所述,你的程序没有错误。只是让回顾下java数组的定义。 参考技术C 错在,没有错误! 参考技术D 一点问题也没有.
如何将String类的字符串 赋值给Char数组
char*转换Qt下面,字符串都用QString,确实给开发者提供了方便,想想VC里面定义的各种变量类型,而且函数参数类型五花八门,经常需要今年新那个类型转换
Qt再使用第三方开源库时,由于库的类型基本上都是标准的类型,字符串遇的多的就是Char*类型
在Qt下怎样将QString转char*呢,需要用到QByteArray类,QByteArray类的说明详见Qt帮助文档。
因为char*最后都有一个‘/0’作为结束符,而采用QString::toLatin1()时会在字符串后面加上‘/0’
方法如下:
Qstring str;
char* ch;
QByteArray ba = str.toLatin1();
ch=ba.data();
这样就完成了QString向char*的转化。经测试程序运行时不会出现bug
注意第三行,一定要加上,不可以str.toLatin1().data()这样一部完成,可能会出错。
补充:以上方法当QString里不含中文时,没有问题,但是QString内含有中文时,转换为char*就是乱码,采用如下方法解决:
方法1:
添加GBK编码支持:
#include <QTextCodec>
QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
然后改变上面的第三行为:QByteArray ba = str.toLoacl8Bit(); toLoacl8Bit支持中文
方法2:
先将QString转为标准库中的string类型,然后将string转为char*,如下:
std::string str = filename.toStdString();
const char* ch = str.c_str(); 参考技术A
有几种方法。
使用string类的c_str()函数strcpy(str,string.c_str());
for循环实现
for(i =0 ;i < string.size();i++)
str[i] = string.at(i);
使用string类的copy函数
string.copy(str,0,string.size());
以上是关于String数组的定义和赋值的主要内容,如果未能解决你的问题,请参考以下文章