c++_string类详解

c++_string类详解
c++_string类详解

C++中针对C语言中处理字符串的难题,在标准库中设计了string类,因此现在编程中涉及到字符串的处理,就可以直接使用string类了。

之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?)。我们尽可以把它看成是C++的基本数据类型。

首先,为了在我们的程序中使用string类型,我们必须包含头文件。如下:

#include //注意这里不是string.h string.h是C字符串头文件

1.声明一个C++字符串

声明一个字符串变量很简单:

string Str;

这样我们就声明了一个字符串变量,但既然是一个类,就有构造函数和析构函数。上面的声明没有传入参数,所以就直接使用了string的默认的构造函数,这个函数所作的就是把Str 初始化为一个空字符串。String类的构造函数和析构函数如下:

a) string s; //生成一个空字符串s

b) string s(str) //拷贝构造函数生成str的复制品

c) string s(str,stridx) //将字符串str内“始于位置stridx”的部分当作字符串的初值

d) string s(str,stridx,strlen) //将字符串str内“始于stridx且长度顶多strlen”的部分作为字符串的初值

e) string s(cstr) //将C字符串作为s的初值

f) string s(chars,chars_len) //将C字符串前chars_len个字符作为字符串s的初值。

g) string s(num,c) //生成一个字符串,包含num个c字符

h) string s(beg,end) //以区间beg;end(不包含end)内的字符作为字符串s的初值

i) s.~string() //销毁所有字符,释放内存

都很简单,我就不解释了。

2.字符串操作函数

这里是C++字符串的重点,我先把各种操作函数罗列出来,不喜欢把所有函数都看完的人可以在这里找自己喜欢的函数,再到后面看他的详细解释。

a) =,assign() //赋以新值

b) swap() //交换两个字符串的内容

c) +=,append(),push_back() //在尾部添加字符

d) insert() //插入字符

e) erase() //删除字符

f) clear() //删除全部字符

g) replace() //替换字符

h) + //串联字符串

i) ==,!=,<,<=,>,>=,compare() //比较字符串

j) size(),length() //返回字符数量

k) max_size() //返回字符的可能最大个数

l) empty() //判断字符串是否为空

m) capacity() //返回重新分配之前的字符容量

n) reserve() //保留一定量内存以容纳一定数量的字符

o) [ ], at() //存取单一字符

p) >>,getline() //从stream读取某值

q) << //将谋值写入stream

r) copy() //将某值赋值为一个C_string

s) c_str() //将内容以C_string返回

t) data() //将内容以字符数组形式返回

u) substr() //返回某个子字符串

v)查找函数

w)begin() end() //提供类似STL的迭代器支持

x) rbegin() rend() //逆向迭代器

y) get_allocator() //返回配置器

下面详细介绍:

2.1 C++字符串和C字符串的转换

C++提供的由C++字符串得到对应的C_string的方法是使用data()、c_str()和copy(),其中,data()以字符数组的形式返回字符串内容,但并不添加’\0’。c_str()返回一个以‘\0’结尾的字符数组,而copy()则把字符串的内容复制或写入既有的c_string或字符数组内。C++字符串并不以’\0’结尾。我的建议是在程序中能使用C++字符串就使用,除非万不得已不选用c_string。由于只是简单介绍,详细介绍掠过,谁想进一步了解使用中的注意事项可以给我留言(到我的收件箱)。我详细解释。

2.2 大小和容量函数

一个C++字符串存在三种大小:a)现有的字符数,函数是size()和length(),他们等效。Empty()用来检查字符串是否为空。b)max_size() 这个大小是指当前C++字符串最多能包含的字符数,很可能和机器本身的限制或者字符串所在位置连续内存的大小有关系。我们一般情况下不用关心他,应该大小足够我们用的。但是不够用的话,会抛出length_error异常c)capacity()重新分配内存之前 string所能包含的最大字符数。这里另一个需要指出的是reserve()函数,这个函数为string重新分配内存。重新分配的大小由其参数决定,默认参数为0,这时候会对string进行非强制性缩减。

还有必要再重复一下C++字符串和C字符串转换的问题,许多人会遇到这样的问题,自己做的程序要调用别人的函数、类什么的(比如数据库连接函数Connect(char*,char*)),但别人的函数参数用的是char*形式的,而我们知道,c_str()、data()返回的字符数组由该字符串拥有,所以是一种const char*,要想作为上面提及的函数的参数,还必须拷贝到一个char*,而我们的原则是能不使用C字符串就不使用。那么,这时候我们的处理方式是:如果此函数对参数(也就是char*)的内容不修改的话,我们可以这样

Connect((char*)UserID.c_str(), (char*)PassWD.c_str()),但是这时候是存在危险的,因为这样转换后的字符串其实是可以修改的(有兴趣地可以自己试一试),所以我强调除非函数调用的时候不对参数进行修改,否则必须拷贝到一个char*上去。当然,更稳妥的办法是无论什么情况都拷贝到一个char*上去。同时我们也祈祷现在仍然使用C字符串进行编程的

高手们(说他们是高手一点儿也不为过,也许在我们还穿开裆裤的时候他们就开始编程了,哈哈…)写的函数都比较规范,那样我们就不必进行强制转换了。

2.3元素存取

我们可以使用下标操作符[]和函数at()对元素包含的字符进行访问。但是应该注意的是操作符[]并不检查索引是否有效(有效索引0~str.length()),如果索引失效,会引起未定义的行为。而at()会检查,如果使用at()的时候索引无效,会抛出out_of_range异常。

有一个例外不得不说,const string a;的操作符[]对索引值是a.length()仍然有效,其返回值是’\0’。其他的各种情况,a.length()索引都是无效的。举例如下:

const string Cstr(“const string”);

string Str(“string”);

Str[3]; //ok

Str.at(3); //ok

Str[100]; //未定义的行为

Str.at(100); //throw out_of_range

Str[Str.length()] //未定义行为

Cstr[Cstr.length()] //返回‘\0’

Str.at(Str.length());//throw out_of_range

Cstr.at(Cstr.length()) ////throw out_of_range

我不赞成类似于下面的引用或指针赋值:

char& r=s[2];

char* p= &s[3];

因为一旦发生重新分配,r,p立即失效。避免的方法就是不使用。

2.4比较函数

C++字符串支持常见的比较操作符(>,>=,<,<=,==,!=),甚至支持string与C-string 的比较(如 str<”hello”)。在使用>,>=,<,<=这些操作符的时候是根据“当前字符特性”将字符按字典顺序进行逐一得比较。字典排序靠前的字符小,比较的顺序是从前向后比较,遇到不相等的字符就按这个位置上的两个字符的比较结果确定两个字符串的大小。同时,string(“aaaa”) 另一个功能强大的比较函数是成员函数compare()。他支持多参数处理,支持用索引值和长度定位子串来进行比较。他返回一个整数来表示比较结果,返回值意义如下:0-相等〉0-大于 <0-小于。举例如下:

string s(“abcd”);

https://www.360docs.net/doc/984396640.html,pare(“abcd”); //返回0

https://www.360docs.net/doc/984396640.html,pare(“dcba”); //返回一个小于0的值

https://www.360docs.net/doc/984396640.html,pare(“ab”); //返回大于0的值

https://www.360docs.net/doc/984396640.html,pare(s); //相等

https://www.360docs.net/doc/984396640.html,pare(0,2,s,2,2); //用”ab”和”cd”进行比较小于零

https://www.360docs.net/doc/984396640.html,pare(1,2,”bcx”,2); //用”bc”和”bc”比较。

怎么样?功能够全的吧!什么?还不能满足你的胃口?好吧,那等着,后面有更个性化的比较算法。先给个提示,使用的是STL的比较算法。什么?对STL一窍不通?靠,你重修吧!

2.5 更改内容

这在字符串的操作中占了很大一部分。

首先讲赋值,第一个赋值方法当然是使用操作符=,新值可以是string(如:s=ns) 、

c_string(如:s=”gaint”)甚至单一字符(如:s=’j’)。还可以使用成员函数assign(),这个成员函数可以使你更灵活的对字符串赋值。还是举例说明吧:

s.assign(str); //不说

s.assign(str,1,3);//如果str是”iamangel”就是把”ama”赋给字符串

s.assign(str,2,string::npos);//把字符串str从索引值2开始到结尾赋给s

s.assign(“gaint”); //不说

s.assign(“nico”,5);//把’n’‘I’‘c’‘o’‘\0’赋给字符串

s.assign(5,’x’);//把五个x赋给字符串

把字符串清空的方法有三个:s=””;s.clear();s.erase();(我越来越觉得举例比说话让别人容易懂!)。

string提供了很多函数用于插入(insert)、删除(erase)、替换(replace)、增加字符。

先说增加字符(这里说的增加是在尾巴上),函数有 +=、append()、push_back()。举例如下:

s+=str;//加个字符串

s+=”my name is jiayp”;//加个C字符串

s+=’a’;//加个字符

s.append(str);

s.append(str,1,3);//不解释了同前面的函数参数assign的解释

s.append(str,2,string::npos)//不解释了

s.append(“my name is jiayp”);

s.append(“nico”,5);

s.append(5,’x’);

字符串操作是一个不小的主题,在标准C++中,string字符串类成为一个标准,之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下的需要.

C++ Strings(字符串)

--------------------------------------------------------------------------------

构造函数(Constructors)

语法:

string();

string( size_type length, char ch );

string( const char *str );

string( const char *str, size_type length );

string( string &str, size_type index, size_type length ); string( input_iterator start, input_iterator end );

字符串的构造函数创建一个新字符串,包括:

以length为长度的ch的拷贝(即length个ch)

以str为初值(长度任意),

以index为索引开始的子串,长度为length, 或者

以从start到end的元素为初值.

例如,

string str1( 5, 'c' );

string str2( "Now is the time..." );

string str3( str2, 11, 4 );

cout << str1 << endl;

cout << str2 << endl;

cout << str3 << endl;

显示

ccccc

Now is the time...

time

--------------------------------------------------------------------------------

操作符(Operators)

语法:

==

>

<

>=

<=

!=

+

+=

[]

你可以用==, >, <, >=, <=, and !=比较字符串. 可以用+ 或者+= 操作符连接两个字符串, 并且可以用[]获取特定的字符.

相关主题:

at(), compare().

--------------------------------------------------------------------------------

添加文本(append)

语法:

basic_string &append( const basic_string &str );

basic_string &append( const char *str );

basic_string &append( const basic_string &str, size_type index,

size_type len );

basic_string &append( const char *str, size_type num );

basic_string &append( size_type num, char ch );

basic_string &append( input_iterator start, input_iterator end );

append() 函数可以完成以下工作:

在字符串的末尾添加str,

在字符串的末尾添加str的子串,子串以index索引开始,长度为len

在字符串的末尾添加str中的num个字符,

在字符串的末尾添加num个字符ch,

在字符串的末尾添加以迭代器start和end表示的字符序列.

例如以下代码:

string str = "Hello World";

str.append( 10, '!' );

cout << str << endl;

显示

Hello World!!!!!!!!!!

相关主题:

+ 操作符

--------------------------------------------------------------------------------

赋值(assign)

语法:

basic_string &assign( const basic_string &str );

basic_string &assign( const char *str );

basic_string &assign( const char *str, size_type num );

basic_string &assign( const basic_string &str, size_type index, size_type len );

basic_string &assign( size_type num, char ch );

函数以下列方式赋值:

用str为字符串赋值,

用str的开始num个字符为字符串赋值,

用str的子串为字符串赋值,子串以index索引开始,长度为len

用num个字符ch为字符串赋值.

例如以下代码:

string str1, str2 = "War and Peace";

str1.assign( str2, 4, 3 );

cout << str1 << endl;

显示

and

--------------------------------------------------------------------------------

at

语法:

reference at( size_type index );

at()函数返回一个引用,指向在index位置的字符. 如果index不在字符串范围内, at() 将报告"out of range"错误,并抛出out_of_range异常。比如下列代码:

string text = "ABCDEF";

char ch = text.at( 2 );

显示字符'C'.

相关主题:

[]操作符

--------------------------------------------------------------------------------

begin

语法:

iterator begin();

begin()函数返回一个迭代器,指向字符串的第一个元素.

相关主题:

end()

--------------------------------------------------------------------------------

c_str

语法:

const char *c_str();

c_str()函数返回一个指向正规C字符串的指针, 内容与本字符串相同.

相关主题:

[] 操作符

--------------------------------------------------------------------------------

容量(capacity)

语法:

size_type capacity();

capacity()函数返回在重新申请更多的空间前字符串可以容纳的字符数. 这个数字至少与size()一样大.

相关主题:

max_size(), reserve(), resize(), size(),

--------------------------------------------------------------------------------

比较(compare)

语法:

int compare( const basic_string &str );

int compare( const char *str );

int compare( size_type index, size_type length, const basic_string &str ); int compare( size_type index, size_type length, const basic_string &str, size_type index2,

size_type length2 );

int compare( size_type index, size_type length, const char *str, size_type length2 );

compare()函数以多种方式比较本字符串和str,返回:

返回值情况

小于零this < str

零this == str

大于零this > str

不同的函数:

比较自己和str,

比较自己的子串和str,子串以index索引开始,长度为length

比较自己的子串和str的子串,其中index2和length2引用str,index和length 引用自己

比较自己的子串和str的子串,其中str的子串以索引0开始,长度为length2,自己的子串以index开始,长度为length

相关主题:

操作符

--------------------------------------------------------------------------------

拷贝(copy)

语法:

size_type copy( char *str, size_type num, size_type index );

copy()函数拷贝自己的num个字符到str中(从索引index开始)。返回值是拷贝的字符数

--------------------------------------------------------------------------------

data

语法:

const char *data();

data()函数返回指向自己的第一个字符的指针.

相关主题:

c_str()

--------------------------------------------------------------------------------

empty

语法:

bool empty();

如果字符串为空则empty()返回真(true),否则返回假(false).

--------------------------------------------------------------------------------

end

语法:

iterator end();

end()函数返回一个迭代器,指向字符串的末尾(最后一个字符的下一个位置).

相关主题:

begin()

--------------------------------------------------------------------------------

删除(erase)

语法:

iterator erase( iterator pos );

iterator erase( iterator start, iterator end );

basic_string &erase( size_type index = 0, size_type num = npos );

erase()函数可以:

删除pos指向的字符, 返回指向下一个字符的迭代器,

删除从start到end的所有字符, 返回一个迭代器,指向被删除的最后一个字符的下一个位置

删除从index索引开始的num个字符, 返回*this.

参数index 和num 有默认值, 这意味着erase()可以这样调用:只带有index 以删除index后的所有字符,或者不带有任何参数以删除所有字符. 例如:

string s("So, you like donuts, eh? Well, have all the donuts in the world!");

cout << "The original string is '" << s << "'" << endl;

s.erase( 50, 14 );

cout << "Now the string is '" << s << "'" << endl;

s.erase( 24 );

cout << "Now the string is '" << s << "'" << endl;

s.erase();

cout << "Now the string is '" << s << "'" << endl;

将显示

The original string is 'So, you like donuts, eh? Well, have all the donuts in the world!'

Now the string is 'So, you like donuts, eh? Well, have all the donuts' Now the string is 'So, you like donuts, eh?'

Now the string is ''

--------------------------------------------------------------------------------

查找(find)

语法:

size_type find( const basic_string &str, size_type index );

size_type find( const char *str, size_type index );

size_type find( const char *str, size_type index, size_type length );

size_type find( char ch, size_type index );

find()函数:

返回str在字符串中第一次出现的位置(从index开始查找)。如果没找到则返回string::npos,

返回str在字符串中第一次出现的位置(从index开始查找,长度为length)。如果没找到就返回string::npos,

返回字符ch在字符串中第一次出现的位置(从index开始查找)。如果没找到就返回string::npos

例如,

string str1( "Alpha Beta Gamma Delta" );

unsigned int loc = str1.find( "Omega", 0 );

if( loc != string::npos )

cout << "Found Omega at " << loc << endl;

else

cout << "Didn't find Omega" << endl;

--------------------------------------------------------------------------------

find_first_of

语法:

size_type find_first_of( const basic_string &str, size_type index = 0 ); size_type find_first_of( const char *str, size_type index = 0 );

size_type find_first_of( const char *str, size_type index, size_type num ); size_type find_first_of( char ch, size_type index = 0 );

find_first_of()函数:

查找在字符串中第一个与str中的某个字符匹配的字符,返回它的位置。搜索从index开始,如果没找到就返回string::npos

查找在字符串中第一个与str中的某个字符匹配的字符,返回它的位置。搜索从index开始,最多搜索num个字符。如果没找到就返回string::npos,

查找在字符串中第一个与ch匹配的字符,返回它的位置。搜索从index开始。

相关主题:

find()

--------------------------------------------------------------------------------

find_first_not_of

语法:

size_type find_first_not_of( const basic_string &str, size_type index = 0 ); size_type find_first_not_of( const char *str, size_type index = 0 );

size_type find_first_not_of( const char *str, size_type index, size_type num );

size_type find_first_not_of( char ch, size_type index = 0 );

find_first_not_of()函数:

在字符串中查找第一个与str中的字符都不匹配的字符,返回它的位置。搜索从index开始。如果没找到就返回string::nops

在字符串中查找第一个与str中的字符都不匹配的字符,返回它的位置。搜索从index开始,最多查找num个字符。如果没找到就返回string::nops

在字符串中查找第一个与ch不匹配的字符,返回它的位置。搜索从index开始。如果没找到就返回string::nops

相关主题:

find()

--------------------------------------------------------------------------------

find_last_of

语法:

size_type find_last_of( const basic_string &str, size_type index = npos ); size_type find_last_of( const char *str, size_type index = npos );

size_type find_last_of( const char *str, size_type index, size_type num ); size_type find_last_of( char ch, size_type index = npos );

find_last_of()函数:

在字符串中查找最后一个与str中的某个字符匹配的字符,返回它的位置。搜索从index开始。如果没找到就返回string::nops

在字符串中查找最后一个与str中的某个字符匹配的字符,返回它的位置。搜索从index开始,最多搜索num个字符。如果没找到就返回string::nops

在字符串中查找最后一个与ch匹配的字符,返回它的位置。搜索从index开始。如果没找到就返回string::nops

相关主题:

find()

--------------------------------------------------------------------------------

find_last_not_of

语法:

size_type find_last_not_of( const basic_string &str, size_type index = npos );

size_type find_last_not_of( const char *str, size_type index = npos);

size_type find_last_not_of( const char *str, size_type index, size_type num );

size_type find_last_not_of( char ch, size_type index = npos );

find_last_not_of()函数:

在字符串中查找最后一个与str中的字符都不匹配的字符,返回它的位置。搜索从index开始。如果没找到就返回string::nops

在字符串中查找最后一个与str中的字符都不匹配的字符,返回它的位置。搜索从index开始,最多查找num个字符如果没找到就返回string::nops

在字符串中查找最后一个与ch不匹配的字符,返回它的位置。搜索从index开始。如果没找到就返回string::nops

相关主题:

find()

--------------------------------------------------------------------------------

get_allocator

语法:

allocator_type get_allocator();

get_allocator()函数返回本字符串的配置器.

--------------------------------------------------------------------------------

插入(insert)

语法:

iterator insert( iterator i, const char &ch );

basic_string &insert( size_type index, const basic_string &str );

basic_string &insert( size_type index, const char *str );

basic_string &insert( size_type index1, const basic_string &str,

size_type index2, size_type num );

basic_string &insert( size_type index, const char *str, size_type num ); basic_string &insert( size_type index, size_type num, char ch );

void insert( iterator i, size_type num, const char &ch );

void insert( iterator i, iterator start, iterator end );

insert()函数的功能非常多:

在迭代器i表示的位置前面插入一个字符ch,

在字符串的位置index插入字符串str,

在字符串的位置index插入字符串str的子串(从index2开始,长num个字符), 在字符串的位置index插入字符串str的num个字符,

在字符串的位置index插入num个字符ch的拷贝,

在迭代器i表示的位置前面插入num个字符ch的拷贝,

在迭代器i表示的位置前面插入一段字符,从start开始,以end结束.

相关主题:

replace()

--------------------------------------------------------------------------------

长度(length)

语法:

size_type length();

length()函数返回字符串的长度. 这个数字应该和size()返回的数字相同.

相关主题:

size()

--------------------------------------------------------------------------------

max_size

语法:

size_type max_size();

max_size()函数返回字符串能保存的最大字符数。

--------------------------------------------------------------------------------

rbegin

语法:

const reverse_iterator rbegin();

rbegin()返回一个逆向迭代器,指向字符串的最后一个字符。

相关主题:

rend()

--------------------------------------------------------------------------------

rend

语法:

const reverse_iterator rend();

rend()函数返回一个逆向迭代器,指向字符串的开头(第一个字符的前一个位置)。

相关主题:

rbegin()

--------------------------------------------------------------------------------

替换(replace)

语法:

basic_string &replace( size_type index, size_type num, const

basic_string &str );

basic_string &replace( size_type index1, size_type num1, const

basic_string &str, size_type index2,

size_type num2 );

basic_string &replace( size_type index, size_type num, const char *str ); basic_string &replace( size_type index, size_type num1, const char *str, size_type num2 );

basic_string &replace( size_type index, size_type num1, size_type num2, char ch );

basic_string &replace( iterator start, iterator end, const basic_string

&str );

basic_string &replace( iterator start, iterator end, const char *str );

basic_string &replace( iterator start, iterator end, const char *str,

size_type num );

basic_string &replace( iterator start, iterator end, size_type num, char

ch );

replace()函数:

用str中的num个字符替换本字符串中的字符,从index开始

用str中的num2个字符(从index2开始)替换本字符串中的字符,从index1开始,最多num1个字符

用str中的num个字符(从index开始)替换本字符串中的字符

用str中的num2个字符(从index2开始)替换本字符串中的字符,从index1开始,num1个字符

用num2个ch字符替换本字符串中的字符,从index开始

用str中的字符替换本字符串中的字符,迭代器start和end指示范围

用str中的num个字符替换本字符串中的内容,迭代器start和end指示范围,用num个ch字符替换本字符串中的内容,迭代器start和end指示范围.

例如,以下代码显示字符串"They say he carved it himself...find your

soul-mate, Homer."

string s = "They say he carved it himself...from a BIGGER spoon";

string s2 = "find your soul-mate, Homer.";

s.replace( 32, s2.length(), s2 );

cout << s << endl;

相关主题:

insert()

--------------------------------------------------------------------------------

保留空间(reserve)

语法:

void reserve( size_type num );

reserve()函数设置本字符串的capacity 以保留num个字符空间。

相关主题:

capacity()

--------------------------------------------------------------------------------

resize

语法:

void resize( size_type num );

void resize( size_type num, char ch );

resize()函数改变本字符串的大小到num, 新空间的内容不确定。也可以指定用ch填充。

--------------------------------------------------------------------------------

rfind

语法:

size_type rfind( const basic_string &str, size_type index );

size_type rfind( const char *str, size_type index );

size_type rfind( const char *str, size_type index, size_type num );

size_type rfind( char ch, size_type index );

rfind()函数:

返回最后一个与str中的某个字符匹配的字符,从index开始查找。如果没找到就返回string::npos

返回最后一个与str中的某个字符匹配的字符,从index开始查找,最多查找num 个字符。如果没找到就返回string::npos

返回最后一个与ch匹配的字符,从index开始查找。如果没找到就返回string::npos

例如,在下列代码中第一次调用rfind()返回string::npos,因为目标词语不在开始的8个字符中。然而,第二次调用返回9,因为目标词语在开始的20个字符之中。

int loc;

string s = "My cat's breath smells like cat food.";

loc = s.rfind( "breath", 8 );

cout << "The word breath is at index " << loc << endl;

loc = s.rfind( "breath", 20 );

cout << "The word breath is at index " << loc << endl;

相关主题:

find()

--------------------------------------------------------------------------------

size

语法:

size_type size();

size()函数返回字符串中现在拥有的字符数。

相关主题:

length(), max_size()

--------------------------------------------------------------------------------

substr

语法:

basic_string substr( size_type index, size_type num = npos );

substr()返回本字符串的一个子串,从index开始,长num个字符。如果没有指定,将是默认值string::npos。这样,substr()函数将简单的返回从index 开始的剩余的字符串。

C++string类型总结

对C++中string类型的总结 string类对象的构造 简化构造函数原型如下(注意,为了简便,把模板中最后一个默认参数省略了): 1: explicit basic_string(); 2: string(const char *s); 3: string(const char *s, size_type n); 4: string(const string& str); 5: string(const string& str, size_type pos, size_type n); 6: string(size_type n, E c); 7: string(const_iterator first, const_iterator last); string对象的操作 字符串比较 支持六种关系运算符(==、!=、>、>=、<、<=),其采用字典排序策略(与C中字符串比较策略完全一样)。这六个关系运算符是非成员的重载运算符。而这些 运算符都支持三种操作数组合:string op string、string op const char*、cons t char* op string(其中op是前面六种关系运算符中任意一种)。解释:提供运算 符的三种重载版本主要是从效率角度考虑的,其避免了临时string对象的产生。 另外,string类还提供了各种重载版本的成员函数compare来比较,简化函数原型为: 1: int compare(const string& str) const; 2: int compare(size_type p0, size_type n0, const string& str); 3: int compare(size_type p0, size_type n0, const string& str, si ze_type pos, size_type n); 4: int compare(const char* s) const; 5: int compare(size_type p0, size_type n0, const char* s) const; 6: int compare(size_type p0, size_type n0, const char* s, size_t ype n) const; 返回值:如果调用该函数的对象的比较序列小于操作数比较序列,则返回负数; 若相等,则返回0;否则,返回正数。

我的java基础题和答案详解

If语句相关训练 1. (标识符命名)下面几个变量中,那些是对的那些是错的错的请说明理由(CDF) A. ILoveJava B. $20 C. learn@java D. E. Hello_World F. 2tigers 答:标识符中不能有@,不能含有点号,开头只能是字母和$ 2. (Java 程序的编译与运行)假设有如下程序: package public class HelloWorld{ public static void main(String args[]){ "Hello World"); } } 问: 1)假设这个代码存在文件中,那这个程序能够编译通过为什么 如果编译不通过,应该如何改进 答:不能,含有public的类文件名必须要和类名一致;应将改写成 2)假设这个.java 文件放在C:\javafile\目录下,CLASSPATH=.,则生成的.class 文件应该放在什么目录下如何运行 答:.class应该存放在C:\javafile\目录下 3. (if 语句)读入一个整数,判断其是奇数还是偶数 public class Test { int n; If(n%2==0){ 是偶数”); }else{ 是奇数”); } } 4. (操作符)有如下代码: int a = 5; int b = (a++) + (--a) +(++a); 问执行完之后,b 的结果是多少 答:16 解析a先把5赋值给b让后再自增1相当于(b=5+(--6)+(++5))

5. (基本类型的运算)一家商场在举行打折促销,所有商品都进行8 折优惠。一 位程序员把这个逻辑写成: short price = ...; (操作符)有如下代码: a = (a>b)a:b; 请问这段代码完成了什么功能。 答:这段代码的作用是取最大值,当a>b成立时,a=a;当a>b不成立时,a=b; 8. (if 语句)读入一个整数,表示一个人的年龄。如果小于6 岁,则输出“儿童”,6 岁到13 岁,输出“少儿”;14 岁到18 岁,输出“青少年”;18 岁到35 岁,输出“青年”;35 岁到50 岁,输出“中年”;50 岁以上输出“中老年”。 答:public class AgeTest { public static void main(String[] args) { int n=12; if(n<6){

JAVA实验报告四(实现String类)

JA V A实验报告实验四运用JavaFx实现时钟动画 班级:计算机科学与技术1306 学号: 00 姓名:王雨思 指导教师:鲁鸣鸣 2014 年 12 月 1 日

目录 一.概述 (6) 二.总体方案设计 (7) 三.详细设计 (8) 四.程序的调试与运行结果说明 (9) 五.课程设计总结 (10) 六.后记 (11) 七.附录 (12) 参考文献 (13)

一概述 1.课程设计的目的 了解和掌握String类的实现原理 2.课程设计的要求 基于ArrayList实现可以深度复制(Deep Copy)的栈结构。1.首先用ArrayList实现栈结构 2.接着将第1步实现的栈通过Clonable接口实现深度复制 3.课程设计的主要设计思想 基于ArrayList实现可以深度复制(Deep Copy)的栈结构。二总体方案设计 编写程序实现MyString类的下列操作: public MyString(char[] chars); public char charAt(int index); public int length(); public MyString substring(int begin, int end); public MyString toLowerCase(); public boolean equals(MyString s); public static MyString valueOf(int i); public int compare(String s); public MyString substring(int begin); public MyString toUpperCase(); public char[] toChars();

精选30道Java笔试题解答

都是一些非常非常基础的题,是我最近参加各大IT公司笔试后靠记忆记下来的,经过整理献给与我一样参加各大IT校园招聘的同学们,纯考Java基础功底,老手们就不用进来了,免得笑话我们这些未出校门的孩纸们,但是IT公司就喜欢考这些基础的东西,所以为了能进大公司就~~~当复习期末考吧。花了不少时间整理,在整理过程中也学到了很多东西,请大家认真对待每一题~~~ 下面都是我自己的答案非官方,仅供参考,如果有疑问或错误请一定要提出来,大家一起进步啦~~~ 1. 下面哪些是Thread类的方法() A start() B run() C exit() D getPriority() 答案:ABD 解析:看Java API docs吧:https://www.360docs.net/doc/984396640.html,/javase/7/docs/api/,exit()是System类的方法,如System.exit(0)。 2. 下面关于https://www.360docs.net/doc/984396640.html,ng.Exception类的说法正确的是() A 继承自Throwable B Serialable CD 不记得,反正不正确 答案:A 解析:Java异常的基类为https://www.360docs.net/doc/984396640.html,ng.Throwable,https://www.360docs.net/doc/984396640.html,ng.Error和https://www.360docs.net/doc/984396640.html,ng.Exception继承Throwable,RuntimeException和其它的Exception等继承Exception,具体的RuntimeException继承RuntimeException。扩展:错误和异常的区别(Error vs Exception) 1) https://www.360docs.net/doc/984396640.html,ng.Error: Throwable的子类,用于标记严重错误。合理的应用程序不应该去try/catch这种错误。绝大多数的错误都是非正常的,就根本不该出现的。 https://www.360docs.net/doc/984396640.html,ng.Exception: Throwable的子类,用于指示一种合理的程序想去catch的条件。即它仅仅是一种程序运行条件,而非严重错误,并且鼓励用户程序去catch它。 2) Error和RuntimeException及其子类都是未检查的异常(unchecked exceptions),而所有其他的Exception 类都是检查了的异常(checked exceptions). checked exceptions: 通常是从一个可以恢复的程序中抛出来的,并且最好能够从这种异常中使用程序恢复。比如FileNotFoundException, ParseException等。 unchecked exceptions: 通常是如果一切正常的话本不该发生的异常,但是的确发生了。比如ArrayIndexOutOfBoundException, ClassCastException等。从语言本身的角度讲,程序不该去catch这类异常,虽然能够从诸如RuntimeException这样的异常中catch并恢复,但是并不鼓励终端程序员这么做,因为完全没要必要。因为这类错误本身就是bug,应该被修复,出现此类错误时程序就应该立即停止执行。因此, 面对Errors和unchecked exceptions应该让程序自动终止执行,程序员不该做诸如try/catch这样的事情,而是应该查明原因,修改代码逻辑。 RuntimeException:RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等。

编写strcpy函数和类String的构造函数、析构函数、赋值函数和重载运算符函数

编写strcpy函数和类String的构造函数、析构函数、赋值函数和重载运算符函数 已知strcpy函数的原型是 char *strcpy(char *strDest, const char *strSrc); 其中strDest是目的字符串,strSrc是源字符串。 (1)不调用C++/C的字符串库函数,请编写函数strcpy char *strcpy(char *strDest, const char *strSrc); //将源字符串加const,表明其为输入参数 { assert((strDest!=NULL) && (strSrc !=NULL)); // 2分 //对源地址和目的地址加非0断言 char *address = strDest; // 2分//为了实现链式操作,将目的地址返回 while( (*strDest++ = * strSrc++) != …\0? ) // 2分 NULL ; return address ; // 2分 } (2)strcpy能把strSrc的内容复制到strDest,为什么还要char * 类型的返回值? 答:为了实现链式表达式。// 2分 例如int length = strlen( strcpy( strDest, “hello world”) ); 二、网上广泛流传的,也是摘自林锐的 http://www.blog.sh/user3/skyflowing/archives/2006/60452.html 题目: 已知strcpy函数的原型是: char * strcpy(char * strDest,const char * strSrc); 1.不调用库函数,实现strcpy函数。 2.解释为什么要返回char *。

java对象转换String类型的三种方法

北大青鸟中关村 java对象转换String类型的三种方法在很多情况下我们都需要将一个对象转换为String类型。一般来说有三种方法可以实现:Object.toString()、(String)Object、String.valueOf(Object)。下面对这三种方法一一分析 一、采用Object.toString() toString方法是https://www.360docs.net/doc/984396640.html,ng.Object对象的一个public方法。在java中任何对象都会继承Object 对象,所以一般来说任何对象都可以调用toString这个方法。这是采用该种方法时,常派生类会覆盖Object里的toString()方法。 但是在使用该方法时要注意,必须保证Object不是null值,否则将抛出NullPointerException 异常。 二、采用(String)Object 该方法是一个标准的类型转换的方法,可以将Object转换为String。但是在使用该方法是要注意的是需要转换的类型必须是能够转换为String的,否则会出现CalssCastException异常错误。 代码代码如下: Object o = new Integer(100); String string = (String)o; 这段程序代码会出现https://www.360docs.net/doc/984396640.html,ng.ClassCastException: https://www.360docs.net/doc/984396640.html,ng.Integer cannot be cast to https://www.360docs.net/doc/984396640.html,ng.String。因为将Integer类型强制转换为String类型,无法通过。 三、String.valueOf(Object) 上面我们使用Object.toString()方法时需要担心null问题。但是使用该方法无需担心null值问题。因为在使用String.valueOf(Object)时,它会判断Object是否为空值,如果是,则返回null。下面为String.valueOf(Object)的源码: 代码代码如下: public static String valueOf(Object obj) { return (obj == null) ? "null" : obj.toString(); } 从上面我们可以看出两点:一是不需要担心null问题。二是它是以toString()方法为基础的。但是一定要注意:当object为null时,String.valueOf(object)的值是字符串对象:"null",而不是null!!!

【VIP专享】Java中String类的方法详解

Java中String类的方法详解 JJava中String 类的方法及说明 String : 字符串类型 一、构造函数 String(byte[ ]bytes ):通过byte数组构造字符串对象。 String(char[ ]value ):通过char数组构造字符串对象。 String(Sting original ):构造一个original的副本。即:拷贝一个original。 String(StringBuffer buffer ):通过StringBuffer数组构造字符串对象。例如: byte[] b = {'a','b','c','d','e','f','g','h','i','j'}; char[] c = {'0','1','2','3','4','5','6','7','8','9'}; String sb = new String(b); //abcdefghij String sb_sub = new String(b,3/*offset*/,2/*length*/); //de String sc = new String(c); //0123456789 String sc_sub = new String(c,3,2); //34 String sb_copy = new String(sb); //abcdefghij System.out.println("sb:"+sb); System.out.println("sb_sub:"+sb_sub); System.out.println("sc:"+sc); System.out.println("sc_sub:"+sc_sub); System.out.println("sb_copy:"+sb_copy); 输出结果:sb:abcdefghij sb_sub:de sc:0123456789 sc_sub:34 sb_copy:abcdefghij 二、方法: 说明:①、所有方法均为public。 ②、书写格式: [修饰符] <返回类型><方法名([参数列表])> 0.public static int parseInt(String s) public static byte parseByte(String s) public static boolean parseBoolean(String s) public static short parseShort(String s) public static long parseLong(String s) public static double parseDouble(String s) 例如:可以将“数字”格式的字符串,转化为相应的基本数据类型 int i=Integer.pareInt(“123”)

【实验5】c++MyString类实现

ccnu_hupo_cpp_class_tst6exercise2_by:lele_2013_10_30 new不忘delete Design the string class in the C++ library by providing your own implementation for the following functions (name your class MyString): MyString();//构造 MyString(const char* cString);//地址不能变 char at(int index) const;//输入数组下标,返回字符 int length() const;//长度 void clear();//清空len=0 bool empty() const;//是否清空?len不变 int compare(const MyString& s) const;// int compare(int index, int n, const MyString& s) const; void copy(char s[], int index, int n); char* data() const; int find(char ch) const; int find(char ch, int index) const; int find(const MyString& s, int index) const; */ #include #include using namespace std; class MyString { public: MyString(); MyString(const char* cString); char at(int index) const;// int length() const; void clear(); bool empty() const; int compare(const MyString& s) const; int compare(int index, int n, const MyString& s) const; void copy(char s[], int index, int n); char* data() const; int find(char ch) const; int find(char ch, int index) const; int find(const MyString& s, int index) const; ~MyString()

C++ string 详解

C++ string 详解 之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用= 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?)。我们尽可以把它看成是C++的基本数据类型。 好了,进入正题……… 首先,为了在我们的程序中使用string类型,我们必须包含头文件。如下: #include //注意这里不是string.h string.h是C字符串头文件 1.声明一个C++字符串 声明一个字符串变量很简单: string Str; 这样我们就声明了一个字符串变量,但既然是一个类,就有构造函数和析构函数。上面的声明没有传入参数,所以就直接使用了string的默认的构造函数,这个函数所作的就是把Str 初始化为一个空字符串。String类的构造函数和析构函数如下: a) string s; //生成一个空字符串s b) string s(str) //拷贝构造函数生成str的复制品 c) string s(str,stridx) //将字符串str内“始于位置stridx”的部分当作字符串的初值 d) string s(str,stridx,strlen) //将字符串str内“始于stridx且长度顶多strlen”的部分作为字符串的初值 e) string s(cstr) //将C字符串作为s的初值 f) string s(chars,chars_len) //将C字符串前chars_len个字符作为字符串s的初值。 g) string s(num,c) //生成一个字符串,包含num个c字符 h) string s(beg,end) //以区间beg;end(不包含end)内的字符作为字符串s的初值 i) s.~string() //销毁所有字符,释放内存 都很简单,我就不解释了。 2.字符串操作函数 这里是C++字符串的重点,我先把各种操作函数罗列出来,不喜欢把所有函数都看完的人可以在这里找自己喜欢的函数,再到后面看他的详细解释。

各个类及其方法的实现

客户端:(六个类) ChatClient、Denglu、Hall、HUIQICC 、Panecc、Registry 功能: 1、ChatClient: * 该类主要关于客户端与服务器之间的通信,包括聊天信息、悔棋信息、认输信息、退出信息、注册信息、登陆信息等等* 通过该类还调用了大量的Panecc类的方法,实现通信信息在界面上的实现 * * 主要方法是Connect(),通过调用该方法建立与服务器端的连接,在该方法里,new了一个Thread对象, * 同时架设了经过初步包装基本的管道(DataInputStream和DataOutputStream)。接下来便开始接收服务器端 * 发来的消息了,通过简单的协议,实现不同种类消息的接收和解析,该协议便是一串数字(int类型), * 在发送消息方法里先写进一串数字,再写入需要发送的消息内容。同理,接收消息时先读取数字,再根据不同的数字 * 解析出不同的消息种类。 * 除了Connect()方法之外,还有很多信息的发送方法,比如

聊天信息(SendMessage(String message))、登陆信息(SendLogin(String name,String key)) * 、注册信息(SendZhuce(String name,String pass))、发送猜先信息(sendcai(int a))等等 2、Denglu: * 该类是客户端的主驱动类,在该类中声明并初始化了ChatClient类的对象cc, * 并通过该对象调用了ChatClient类的许多方法; * 该类主要是关于登陆界面,并实现了相关监听; * 该类还存在一个内部类--paneLogin ,这个内部类主要是画界面,监听功能在主类中实现 * * 通过该类,将用户信息,发送给服务器,再由服务器连接数据库,判断登陆的相关信息。 3、Hall: * 该类是关于登陆大厅,存在一个内部类--hallt,该内部类

C++ string

C++ string介绍 char*的字符串和C++标准程序库中的string类相比,后者不必担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?)。我们尽可以把它看成是C++的基本数据类型。 好了,进入正题………- 首先,为了在我们的程序中使用string类型,我们必须包含头文件。如下: #include //注意这里不是string.h string.h是C字符串头文件 1.声明一个C++字符串 声明一个字符串变量很简单: string Str; 这样我们就声明了一个字符串变量,但既然是一个类,就有构造函数和析构函数。上面的声明没有传入参数,所以就直接使用了string的默认的构造函数,这个函数所作的就是把Str初始化为一个空字符串。String类的构造函数和析构函数如下: a) string s; //生成一个空字符串s b) string s(str) //拷贝构造函数生成str的复制品 c) string s(str,stridx) //将字符串str内“始于位置stridx”的部分当作字符串的初值 d) string s(str,stridx,strlen) //将字符串str内“始于stridx且长度顶多strlen”的部分作为字符串的初值 e) string s(cstr) //将C字符串作为s的初值 f) string s(chars,chars_len) //将C字符串前chars_len个字符作为字符串s的初值。 g) string s(num,c) //生成一个字符串,包含num个c字符 h) string s(beg,end) //以区间beg;end(不包含end)内的字符作为字符串s的初值 i) s.~string() //销毁所有字符,释放内存 都很简单,我就不解释了。 2.字符串操作函数 这里是C++字符串的重点,我先把各种操作函数罗列出来,不喜欢把所有函数都看完的人可以在这里找自己喜欢的函数,再到后面看他的详细解释。 a) =,assign() //赋以新值

String类的基本特点

1、课程名称:String类的基本特点 2、知识点 2.1、上次课程的主要知识点 数组 2.2、本次预计讲解的知识点 1、String类的两种实例化方式的区别; 2、String类对象的比较; 3、String类对象的使用分析。 3、具体内容(★★★★★) 3.1、String类的两种实例化方式 String并不是一个基本数据类型,它本身属于一个类,但是这个类在设计的过程之中加入了一些Java自己的特殊支持,

所以对于这个类的对象实例化方式就有两种形式: ·直接赋值:String 对象= "内容" ; ·构造方法:public String(String s)。 范例:使用直接赋值 范例:利用构造方法 至少现在通过执行结果来讲,String类的两种实例化方式都是可用的。 3.2、String的相等比较 如果说现在有两个int型的变量,那么要进行相等的判断,则直接使用“==”即可。 范例:两个int比较 发现两个利用直接赋值实现的程序,那么使用“==”的时候可以正常的进行相等判断。 但是如果现在将同样的操作形式用在String上呢? 范例:观察String的比较

通过现在的执行可以发现一个非常严重的问题,此时字符串的内容实际上都是相同的,而在使用“==”比较之后发现有比较结果是false,那么为什么呢? 所以发现在程序中如果使用“==”比较的只是两个对象(任意的引用类型)堆内存地址数值,属于数值内容的比较,并不是堆内存中保存内容的比较,那么要想进行String对象内容的比较则可以利用String类中提供的一个方法完成:·字符串比较(暂时将此方法进行修改):public boolean equals(String str)。 范例:利用equals()实现字符串内容的比较 由于内容是可控的因素,而地址是不可控的因素,所以在日后的开发之中,只要是字符串的比较都使用equals()方法完成,绝对不可能出现“==”。 面试题:请解释在String比较中“==”与“equals()”的区别? ·“==”:是Java本身提供的关系运算符,可以进行数值比较,如果用在String上表示对象内存地址数值比较; ·“equals()”:是String类自己定义的方法,用于进行字符串内容的比较。 3.3、String匿名对象 任何的编程语言都不会提供有字符串这一数据类型。字符串的描述在很多语言之中都使用字符数组表示。而在Java 的设计之处为了解决这样的问题,专门提供了一个String类来进行描述。但是随着发展,为了能够让程序变得更加的易于开发,所以在Java里面也提供双引号声明的数据,而这些数据,在Java中并不是普通的变量,而是属于String类的匿名

Java基础作业详解及答案

Java基础语句作业详解及答案 1.编写程序,用数组实现乘法小九九的存储和输出。【提示:采用多个一维数组。】 public class Multipation { public static void main(String[] args) { // TODO Auto-generated method stub int x[][]=new int[9][9]; for(int i=0;i<9;i++){ for(int j=0;j<9;j++){ if(i>=j){ int m=i+1; int n=j+1; x[i][j]=m*n; System.out.print(m+"*"+n+"="+x[i][j]); } } System.out.println(); } } }

2. 定义一个类Student,属性为学号、姓名和成绩;方法为增加记录SetRecord和得到记录GetRecord。SetRecord给出学号、姓名和成绩的赋值,GetRecord通过学号得到考生的成绩。public class Student { /** *@param args */ private int ID; private String name; private float score; public void SetRecord(int ID,String name,float score){ this.ID=ID; https://www.360docs.net/doc/984396640.html,=name; this.score=score; } public float getRecord(int ID){ if(ID==this.ID) return this.score; else return -1; } public static void main(String[] args) { // TODO Auto-generated method stub Student s=new Student(); s.SetRecord(0,"alex",100); float Sco=s.getRecord(0); System.out.print(Sco); } }

ANSI字符串类String的实现及使用

ANSI字符串类String的实现及使用 和C#不一样,C和C++的内部都没有字符串数据类型,但是我们可以用C++建立一个实现字符串相关操作的类型:String 下面的程序分成两个部分: (1)String类:类头String.h和类实现String.cpp (2)String类使用演示程序Main.cpp 类头文件String.h代码如下: #ifndef STRING_H #define STRING_H #include using namespace std; class String { friend ostream & operator< friend istream & operator>>(istream & input, String & s); public: String(const char* = ""); String(const String &); ~String(); const String & operator=(const String &); //赋值 String & operator+=(const String &); //字符串连接 int operator!() const; //String为空? int operator==(const String &) const; //测试s1==s2 int operator!=(const String &) const; //测试s1!=s2 int operator(const String &) const; //测试s1>s2 int operator<=(const String &) const; //测试s1<=s2

java《注解解析》

Java注解(Annotation)

(1) Annotation(注释)是JDK5.0及以后版本引入的。它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。注释是以‘@注释名’在代码中存在的,根据注释参数的个数,我们可以将注释分为:标记注释、单值注释、完整注释三类。它们都不会直接影响到程序的语义,只是作为注释(标识)存在,我们可以通过反射机制编程实现对这些元数据的访问。另外,你可以在编译时选择代码里的注释是否只存在于源代码级,或者它也能在class文件中出现。 元数据的作用 如果要对于元数据的作用进行分类,目前还没有明确的定义,不过我们可以根据它所起的作用,大致可分为三类: 编写文档:通过代码里标识的元数据生成文档。 代码分析:通过代码里标识的元数据对代码进行分析。 编译检查:通过代码里标识的元数据让编译器能实现基本的编译检查。 基本内置注释 @Override Java代码 1. package com.iwtxokhtd.annotation; 2. /** 3. * 测试Override注解 4. * @author Administrator 5. * 6. */ 7. public class OverrideDemoTest { 8. 9. //@Override 10. public String tostring(){ 11. return "测试注释"; 12. } 13. } package com.iwtxokhtd.annotation; /** * 测试Override注解 * @author Administrator * */ public class OverrideDemoTest { //@Override

LUA string库详解

https://www.360docs.net/doc/984396640.html,/bidepan2023/blog/item/5f49bda4468e91f09052eedc.ht ml LUA string库详解 2009-01-09 18:33 string.byte (s [, i]) Returns the internal numerical code of the i-th character of s, or nil if the index is out of range. If i is absent, then it is assumed to be 1. i may be negative. Note that numerical codes are not necessarily portable across platforms. string.char (i1, i2, ...) Receives 0 or more integers. Returns a string with length equal to the number of arguments, in which each character has the internal numerical code equal to its correspondent argument. Note that numerical codes are not necessarily portable across platforms. 1. string库中所有的字符索引从前往后是1,2,...;从后往前是-1,-2,... 2. string库中所有的function都不会直接操作字符串,而是返回一个结果 s = "[abc]" string.len(s) <==返回5 string.rep("abc", 2) <==返回"abcabc" string.lower("ABC") <==返回"abc" string.upper("abc") <==返回"ABC" string.sub(s, 2) <==返回"abc]" string.sub(s, -2) <==返回"c]" string.sub(s, 2, -2) <==返回"abc" string.format(fmt, ...)返回一个类似printf的格式化字符串 string.find(s, pattern, pos) 第1个参数:源字符串 第2个参数:待搜索之模式串 第3个参数:A hint, 从pos位置开始搜索 找到匹配返回:匹配串开始和结束的位置,否则返回nil 简单的模式串 s = "hello world" i, j = string.find(s, "hello") print(i, j) --> 1 5 print(string.sub(s, i, j)) --> hello print(string.find(s, "world")) --> 7 11 i, j = string.find(s, "l")

表达式类型的实现毕业设计(论文)(已处理)

表达式类型的实现毕业设计(论文)(已处理)课程设计表达式类型的实现 学院计算机学院专业计算机科学与技术年级班别 2006级01班学号3106006394 学生姓名方锐洲辅导教师__ 吴伟民_______ 成绩_______ ______ 2008年7月 3 日 表达式类型的实现 目录 一需求分析 二概要设计 1数据类型的声明 2表达式的抽象数据类型定义 3整体设计 三详细设计 1二叉树的存储类型 2顺序栈的存储类型 3表达式的基本操作 4主程序和其他伪码算法 5函数的调用关系 四设计和调试分析 五用户手册 六测试 七课程设计的心得和心得以及问题-----18

八参考文献 九附录程序清单 一需求分析课程设计要求 问题的描述 一个表达式和一棵二叉树之间存在着自然的对应关系写一个程序实现 基于二叉树表示的算术表达式Expression的操作 基本要求 一必做部分 假设算术表达式Expression内可以含有变量a-z常量0-9和二元运算 符-乘幂实现以下操作 1ReadExpr E ――以字符序列的形式输入语法正确的前缀表达式并构造 表达式E 2WriteExpr E ――用带括号的中缀表达式输出表达式E 3Assign Vc ――实现对变量V的赋值V c变量的初值为0 4Value E ――对算术表达式E求值 5CompoundExpr pE1E2 ――构造一个新的复合表达式E1pE2 二选做部分 1以表达式的原书写形式输入支持大于0的正整数常量 2增加常数合并操作MergeConst E 合并表达式E中所有常数运算例如对表 达式E 23-a b34 进行合并常数的操作后求得E 5-a b12 测试数据 分别输入0a-91abc5x28x32x2x6并输出 每当输入一个表达式后对其中的变量赋值然后对表达式求值还有很多测试的数据详细请见附上的文件Testtxt 二概要设计 1数据类型的声明

《Java基础入门》_课后习题答案解析__1~

第1章 Java开发入门 一、填空题 1、Java EE、Java SE、Java ME 2、JRE 3、javac 4、bin 5、path、classpath 二、选择题 1、ABCD 2、C 3、D 4、B 5、B 三、简答题 1、面向对象、跨平台性、健壮性、安全性、可移植性、多线程性、动态性等。 2、JRE(Java Runtime Environment,Java运行时环境),它相当于操作系统部分,提供了Java程 序运行时所需要的基本条件和许多Java基础类,例如,IO类、GUI控件类、网络类等。JRE是提供给普通用户使用的,如果你只想运行别人开发好的Java程序,那么,你的计算机上必须且只需安装JRE。 JDK(Java Development Kit,Java开发工具包),它包含编译工具、解释工具、文档制作工具、打包工具多种与开发相关的工具,是提供给Java开发人员使用的。初学者学习和使用Java语言时,首先必须下载和安装JDK。JDK中已经包含了JRE部分,初学者安装JDK后不必再去下载和安装JRE了。 四、编程题 public class HelloWorld { public static void main(String[] args) { System.out.println("这是第一个Java程序!"); } } 第2章 Java编程基础 一、填空题 1、 class 2、 true和false 3、单行注释、多行注释、文档注释 4、基本数据类型、引用数据类型 5、 1、2、4、8 6、 & && | || 7、 0 8、 5 9、 34 10、56 二、判断题 1、错 2、对 3、错 4、对 5、错

java笔试题以及答案详解

java笔试题以及答案详解一 一、单项选择题 1.Java是从()语言改进重新设计。 A.Ada B.C++ C.Pasacal D.BASIC 答案:B 2.下列语句哪一个正确() A.Java程序经编译后会产生machine code B.Java程序经编译后会产生byte code C.Java程序经编译后会产生DLL D.以上都不正确 答案:B 3.下列说法正确的有() A.class中的constructor不可省略 B.constructor必须与class同名,但方法不能与class同名 C.constructor在一个对象被new时执行 D.一个class只能定义一个constructor 答案:C 详解:见下面代码,很明显方法是可以和类名同名的,和构造方法唯一的区别就是,构造方法没有返回值。

4.提供Java存取数据库能力的包是() A.java.sql B.java.awt C.https://www.360docs.net/doc/984396640.html,ng D.java.swing 答案:A 5.下列运算符合法的是() A.&& B.<> C.if D.:= 答案:A 详解: 6.执行如下程序代码 a=0;c=0; do{ --c; a=a-1;

}while(a>0); 后,C的值是() A.0 B.1 C.-1 D.死循环 答案:C 详解: 7.下列哪一种叙述是正确的() A.abstract修饰符可修饰字段、方法和类 B.抽象方法的body部分必须用一对大括号{ }包住C.声明抽象方法,大括号可有可无 D.声明抽象方法不可写出大括号 答案:D 详解: 8.下列语句正确的是() A.形式参数可被视为local variable B.形式参数可被字段修饰符修饰 C.形式参数为方法被调用时,真正被传递的参数 D.形式参数不可以是对象 答案:A 详解:

相关文档
最新文档