字符串string的相关应用
之所以抛弃char* 的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够、字符串长度等等,
而且作为一个泛型类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作,== 进行比较,+ 做串联。
我们尽可以把它看成是C++的基本数据类型。
今日讲点:
string中的内容访问
string类的常用函数
string字符串的比较问题
声明一个C++字符串:
string str;//直接声明,很简单
对于string内容的访问问题
1 和c语言的访问方式一样,使用数组下标进行访问
c语言的代码
#include <stdio.h>
int main()
{
char ch[10];
gets(ch);
for(int i=0;i<10;i++)
{
printf("%c ",ch[i]);
}
printf("\n");
return 0;
}
c++的代码
#include<cstring>
#include <iostream>
using namespace std;
int main()
{
string str;
cin>>str;
int len=str.length();
for(int i=0;i<len;i++)
{
cout<<str[i]<<" ";
}
cout<<endl;
return 0;
}
2通过迭代器进行访问
一般的情况下采用第一种方式就可以满足访问的要求,但是有些函数比如insert() erase()则要求以迭代器为参数。
#include <stdio.h>
#include <cstring>
#include <iostream>
using namespace std;
int main()
{
string str="abcdefgh";
string::iterator it;
for(it=str.begin();it!=str.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
return 0;
}
对于string类的常用函数
string属于c++的字符串类,那么类就会存在构造函数(本块了解下就可以)
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() //销毁所有字符,释放内存
#include <iostream>
#include <string>
using namespace std;
int main ( )
{
string str; //定义了一个空字符串str
str = "Hello world"; // 给str赋值为"Hello world"
char cstr[] = "abcde"; //定义了一个C字符串
string s1(str); //调用复制构造函数生成s1,s1为str的复制品
cout<<s1<<endl;
string s2(str,6); //将str内,开始于位置6的部分当作s2的初值
cout<<s2<<endl;
string s3(str,6,3); //将str内,开始于6且长度顶多为3的部分作为s3的初值
cout<<s3<<endl;
string s4(cstr); //将C字符串作为s4的初值
cout<<s4<<endl;
string s5(cstr,3); //将C字符串前3个字符作为字符串s5的初值。
cout<<s5<<endl;
string s6(5,'A'); //生成一个字符串,包含5个'A'字符
cout<<s6<<endl;
string s7(str.begin(),str.begin()+5); //区间str.begin()和str.begin()+5内的字符作为初值
cout<<s7<<endl;
return 0;
}
string的比较等操作
你可以用 ==、>、<、>=、<=、和!=比较字符串,可以用+或者+=操作符连接两个字符串,并且可以用[]获取特定的字符。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str;
cout << "Please input your name:"<<endl;
cin >> str;
if( str == "Li" ) // 字符串相等比较
cout << "you are Li!"<<endl;
else if( str != "Wang" ) // 字符串不等比较
cout << "you are not Wang!"<<endl;
else if( str < "Li") // 字符串小于比较,>、>=、<=类似
cout << "your name should be ahead of Li"<<endl;
else
cout << "your name should be after of Li"<<endl;
str += ", Welcome!"; // 字符串+=
cout << str<<endl;
for(int i = ; i < str.size(); i ++)
cout<<str[i]; // 类似数组,通过[]获取特定的字符
return ;
}
下面介绍string类的相关函数
+=,append(),push_back() //在尾部添加字符
insert() //插入字符
erase() //删除字符
clear() //删除全部字符
replace() //替换字符
size(),length() //返回字符数量
max_size() //返回字符的可能最大个数
empty() //判断字符串是否为空
substr() //返回某个子字符串
find()//查询字串第一次出现的位置下标
查找函数
begin() end() //提供类似STL的迭代器支持
rbegin() rend() //逆向迭代器
#include <iostream>
#include <stdio.h>
using namespace std; int main()
{
string str="";
int len1=str.length();
int len2=str.size();
cout<<"字符串的长度:"<<len1<<" "<<len2<<endl;
//insert插入字符串
str.insert(,"abcd");//在str[3]处开始插入abcd;
cout<<str<<endl; //erase(it)用于删除单个元素,it为需要删除的元素迭代器
string str1="abcdefgh";
str1.erase(str1.begin()+);//删除第三号位 str1[3];
cout<<str1<<endl;
//删除[str1.begin()+2,str1.end()-1)内的元素
str1.erase(str1.begin()+,str1.end()-);
cout<<str1<<endl; string str2="abcdefgh";
//str2.erase(3,2);
str2.erase(,);
cout<<str2<<endl;
return ;
}
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
string str="abcdefghi";
int len=str.length();
cout<<len<<endl;
str.clear();
int len2=str.length();
cout<<len2<<endl;
return ;
}
#include <iostream>
#include <stdio.h>
#include <cstring>
using namespace std;
int main()
{
//substr(pos,len)返回从pos号开始,长度为len的字串
string str="Thank you for your smile";
cout<<str.substr(,)<<endl;
cout<<str.substr(,)<<endl;
cout<<str.substr(,)<<endl;
cout<<endl<<endl; //replace() str.replace(pos,len,str2)把str从pos号位开始,长度为len的字符串替换为str2
//str.replace(it1,it2,str2)把str的迭代器[it1,it2)范围的子串替换成str2
string str1="Maybe you will turn around";
string str2="will not";
string str3="surely";
cout<<str1.replace(,,str2)<<endl;
cout<<str1.replace(str1.begin(),str1.begin()+,str3)<<endl;
return ;
}
Java String 类
字符串广泛应用 在Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。
注意:String 类是不可改变的,所以你一旦创建了 String 对象,那它的值就无法改变了
如果需要对字符串做很多修改,那么应该选择使用 StringBuffer & StringBuilder 类。
package com.nhjc.byc;
import java.lang.String;
public class Main {
public static void main(String[] args) {
char helloarray[]={'h','e','l','l','o'};
String hellostring =new String(helloarray);
System.out.println(helloarray);
}
}
字符串长度
用于获取有关对象的信息的方法称为访问器方法。
String 类的一个访问器方法是 length() 方法,它返回字符串对象包含的字符数。
package com.nhjc.byc;
import java.lang.String;
public class Main {
public static void main(String[] args) {
String str="hello world";
System.out.println(str.length());
}
}
连接字符串
String 类提供了连接两个字符串的方法:
string1.concat(string2);
返回 string2 连接 string1 的新字符串
package com.nhjc.byc;
import java.lang.String;
public class Main {
public static void main(String[] args) {
String str="hello world";
String str1="nhjc";
String str3=str.concat(str1);
System.out.println(str3);
}
}
String 方法
下面是 String 类支持的方法,更多详细
SN(序号) | 方法描述 |
---|---|
1 | char charAt(int index) 返回指定索引处的 char 值。 |
2 | int compareTo(Object o) 把这个字符串和另一个对象比较。 |
3 | int compareTo(String anotherString) 按字典顺序比较两个字符串。 |
4 | int compareToIgnoreCase(String str) 按字典顺序比较两个字符串,不考虑大小写。 |
5 | String concat(String str) 将指定字符串连接到此字符串的结尾。 |
6 | boolean contentEquals(StringBuffer sb) 当且仅当字符串与指定的StringBuffer有相同顺序的字符时候返回真。 |
7 | static String copyValueOf(char[] data) 返回指定数组中表示该字符序列的 String。 |
8 | static String copyValueOf(char[] data, int offset, int count) 返回指定数组中表示该字符序列的 String。 |
9 | boolean endsWith(String suffix) 测试此字符串是否以指定的后缀结束。 |
10 | boolean equals(Object anObject) 将此字符串与指定的对象比较。 |
11 | boolean equalsIgnoreCase(String anotherString) 将此 String 与另一个 String 比较,不考虑大小写。 |
12 | byte[] getBytes() 使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。 |
13 | byte[] getBytes(String charsetName) 使用指定的字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。 |
14 | void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 将字符从此字符串复制到目标字符数组。 |
15 | int hashCode() 返回此字符串的哈希码。 |
16 | int indexOf(int ch) 返回指定字符在此字符串中第一次出现处的索引。 |
17 | int indexOf(int ch, int fromIndex) 返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。 |
18 | int indexOf(String str) 返回指定子字符串在此字符串中第一次出现处的索引。 |
19 | int indexOf(String str, int fromIndex) 返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。 |
20 | String intern() 返回字符串对象的规范化表示形式。 |
21 | int lastIndexOf(int ch) 返回指定字符在此字符串中最后一次出现处的索引。 |
22 | int lastIndexOf(int ch, int fromIndex) 返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索。 |
23 | int lastIndexOf(String str) 返回指定子字符串在此字符串中最右边出现处的索引。 |
24 | int lastIndexOf(String str, int fromIndex) 返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索。 |
25 | int length() 返回此字符串的长度。 |
26 | boolean matches(String regex) 告知此字符串是否匹配给定的正则表达式。 |
27 | boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len) 测试两个字符串区域是否相等。 |
28 | boolean regionMatches(int toffset, String other, int ooffset, int len) 测试两个字符串区域是否相等。 |
29 | String replace(char oldChar, char newChar) 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。 |
30 | String replaceAll(String regex, String replacement) 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。 |
31 | String replaceFirst(String regex, String replacement) 使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。 |
32 | String[] split(String regex) 根据给定正则表达式的匹配拆分此字符串。 |
33 | String[] split(String regex, int limit) 根据匹配给定的正则表达式来拆分此字符串。 |
34 | boolean startsWith(String prefix) 测试此字符串是否以指定的前缀开始。 |
35 | boolean startsWith(String prefix, int toffset) 测试此字符串从指定索引开始的子字符串是否以指定前缀开始。 |
36 | CharSequence subSequence(int beginIndex, int endIndex) 返回一个新的字符序列,它是此序列的一个子序列。 |
37 | String substring(int beginIndex) 返回一个新的字符串,它是此字符串的一个子字符串。 |
38 | String substring(int beginIndex, int endIndex) 返回一个新字符串,它是此字符串的一个子字符串。 |
39 | char[] toCharArray() 将此字符串转换为一个新的字符数组。 |
40 | String toLowerCase() 使用默认语言环境的规则将此 String 中的所有字符都转换为小写。 |
41 | String toLowerCase(Locale locale) 使用给定 Locale 的规则将此 String 中的所有字符都转换为小写。 |
42 | String toString() 返回此对象本身(它已经是一个字符串!)。 |
43 | String toUpperCase() 使用默认语言环境的规则将此 String 中的所有字符都转换为大写。 |
44 | String toUpperCase(Locale locale) 使用给定 Locale 的规则将此 String 中的所有字符都转换为大写。 |
45 | String trim() 返回字符串的副本,忽略前导空白和尾部空白。 |
46 | static String valueOf(primitive data type x) 返回给定data type类型x参数的字符串表示形式。 |
char charAt(int index)
charAt() 方法用于返回指定索引处的字符。索引范围为从 0 到 length() - 1。
package com.nhjc.byc;
import java.lang.String;
public class Main {
public static void main(String[] args) {
String str ="Hello world";
System.out.println(str.charAt(1));//输出e
}
}
Java compareTo() 方法
compareTo() 方法用于两种方式的比较:
- 字符串与对象进行比较。
- 按字典顺序比较两个字符串。
int compareTo(Object o) 或 int compareTo(String anotherString)
返回值
返回值是整型,它是先比较对应字符的大小(ASCII码顺序),如果第一个字符和参数的第一个字符不等,结束比较,返回他们之间的差值,如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符做比较,以此类推,直至比较的字符或被比较的字符有一方。
- 如果参数字符串等于此字符串,则返回值 0;
- 如果此字符串小于字符串参数,则返回一个小于 0 的值;
- 如果此字符串大于字符串参数,则返回一个大于 0 的值。
package com.nhjc.byc;
import java.lang.String;
public class Main {
public static void main(String[] args) {
String str1 = "Strings";
String str2 = "Strings";
String str3 = "Strings123"; int result = str1.compareTo( str2 );
System.out.println(result); result = str2.compareTo( str3 );
System.out.println(result); result = str3.compareTo( str1 );
System.out.println(result);
}
}
Java compareToIgnoreCase() 方法
compareToIgnoreCase() 方法用于按字典顺序比较两个字符串,不考虑大小写。
语法
int compareToIgnoreCase(String str)
返回值
- 如果参数字符串等于此字符串,则返回值 0;
- 如果此字符串小于字符串参数,则返回一个小于 0 的值;
- 如果此字符串大于字符串参数,则返回一个大于 0 的值。
Java concat() 方法
concat() 方法用于将指定的字符串参数连接到字符串上。
语法
public String concat(String s)
参数
s -- 要连接的字符串。
返回值
返回连接后的新字符串。
Java contentEquals() 方法
contentEquals() 方法用于将此字符串与指定的 StringBuffer 比较。
语法
public boolean contentEquals(StringBuffer sb)
参数
-- 要与字符串比较的 StringBuffer。
返回值
如字符串与指定 StringBuffer 表示相同的字符序列,则返回 true;否则返回 false。
实例
public class Test {
public static void main(String args[]) {
String str1 = "String1";
String str2 = "String2";
StringBuffer str3 = new StringBuffer( "String1"); boolean result = str1.contentEquals( str3 );
System.out.println(result); result = str2.contentEquals( str3 );
System.out.println(result);
}
}
Java copyValueOf() 方法
copyValueOf() 方法有两种形式:
public static String copyValueOf(char[] data): 返回指定数组中表示该字符序列的字符串。
public static String copyValueOf(char[] data, int offset, int count): 返回指定数组中表示该字符序列的 字符串。
语法
public static String copyValueOf(char[] data) 或 public static String copyValueOf(char[] data, int offset, int count)
参数
data -- 字符数组。
offset -- 子数组的初始偏移量。。
count -- 子数组的长度。
返回值
返回指定数组中表示该字符序列的字符串。
public class Test {
public static void main(String args[]) {
char[] Str1 = {'h', 'e', 'l', 'l', 'o', ' ', 'r', 'u', 'n', 'o', 'o', 'b'};
String Str2 = ""; Str2 = Str2.copyValueOf( Str1 );
System.out.println("返回结果:" + Str2); Str2 = Str2.copyValueOf( Str1, 2, 6 );
System.out.println("返回结果:" + Str2);
}
}
返回结果:hello runoob
返回结果:llo ru
Java endsWith() 方法
endsWith() 方法用于测试字符串是否以指定的后缀结束。
语法
public boolean endsWith(String suffix)
参数
suffix -- 指定的后缀。
返回值
如果参数表示的字符序列是此对象表示的字符序列的后缀,则返回 true;否则返回 false。注意,如果参数是空字符串,或者等于此 String 对象(用 equals(Object) 方法确定),则结果为 true。
package com.nhjc.byc;
import java.lang.String;
public class Main {
public static void main(String[] args) {
String Str = new String();
Str="Hello world";
boolean retVal; retVal = Str.endsWith( "world" );
System.out.println("返回值 = " + retVal ); retVal = Str.endsWith( "com" );
System.out.println("返回值 = " + retVal );
}
}
Java equals() 方法
语法
public boolean equals(Object anObject)
参数
anObject -- 与字符串进行比较的对象。
返回值
如果给定对象与字符串相等,则返回 true;否则返回 false。
public class Test {
public static void main(String args[]) {
String Str1 = new String("runoob");
String Str2 = Str1;
String Str3 = new String("runoob");
boolean retVal; retVal = Str1.equals( Str2 );
System.out.println("返回值 = " + retVal ); retVal = Str1.equals( Str3 );
System.out.println("返回值 = " + retVal );
}
}
Java equalsIgnoreCase() 方法
equalsIgnoreCase() 方法用于将字符串与指定的对象比较,不考虑大小写。
语法
public boolean equalsIgnoreCase(String anotherString)
参数
anObject -- 与字符串进行比较的对象。
返回值
如果给定对象与字符串相等,则返回 true;否则返回 false。
Java hashCode() 方法
hashCode() 方法用于返回字符串的哈希码。
字符串对象的哈希码根据以下公式计算:
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
使用 int 算法,这里 s[i] 是字符串的第 i 个字符,n 是字符串的长度,^ 表示求幂。空字符串的哈希值为 0。
语法
public int hashCode()
参数
- 无。
返回值
返回对象的哈希码值。
package com.nhjc.byc;
import java.lang.String;
public class Main {
public static void main(String[] args) {
String Str = new String();
Str="Hello world";
System.out.println("字符串的哈希码为 :" + Str.hashCode() );
}
}
字符串string的相关应用的更多相关文章
- C#字符串string以及相关内置函数
C#字符串string函数 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享. ...
- [Java初探04]__字符串(String类)相关
前言 接下来将暂时将重心偏移向实际操作,不在将大量时间花费在详细的知识点整理上,将会简略知识总结笔记的记录,加强实际练习的时间,实例练习篇也不再同步进行,我会将部分我觉得重要的源码更新在每节知识点后面 ...
- Redis字符串(STRING)中BIT相关命令
上篇文章我们对STRING数据类型中一些基本的命令进行了介绍,但是没有涉及到BIT相关的命令,本文我们就来看看几个和BIT相关的命令. 本文是Redis系列的第四篇文章,了解前面的文章有助于更好的理解 ...
- Java String类相关知识梳理(含字符串常量池(String Pool)知识)
目录 1. String类是什么 1.1 定义 1.2 类结构 1.3 所在的包 2. String类的底层数据结构 3. 关于 intern() 方法(重点) 3.1 作用 3.2 字符串常量池(S ...
- C# 字符串string类型转换成DateTime类型 或者 string转换成DateTime?(字符串转换成可空日期类型)
在c#中,string类型转换成DateTime类型是经常用到的,作为基本的知识,这里在此做个小结.一般来说可以使用多种方法进行转换,最常用的就是使用Convert.ToDateTime(string ...
- Java基础——数组应用之字符串String类
字符串String的使用 Java字符串就是Unicode字符序列,例如串“Java”就是4个Unicode字符J,a,v,a组成的. Java中没有内置的字符串类型,而是在标准Java类库中提供了一 ...
- python字符串(string)方法整理
python中字符串对象提供了很多方法来操作字符串,功能相当丰富. print(dir(str)) [..........'capitalize', 'casefold', 'center', 'co ...
- C语言和C++中的字符串(string)
知识内容: 1.C\C++字符串简述 2.C字符串相关操作 3.C++ string类相关操作 一.C\C++字符串简述 1.C语言字符串 C语言字符串是字符的数组.单字节字符串顺序存放各个字符串,并 ...
- Redis 命令,键(key),字符串(String),哈希(Hash),列表(List),集合(Set)(二)
Redis 命令 Redis 命令用于在 redis 服务上执行操作. 要在 redis 服务上执行命令需要一个 redis 客户端.Redis 客户端在我们之前下载的的 redis 的安装包中. ...
随机推荐
- 北京2018网络赛A题
题意:给你一个迷宫,迷宫有开始节点和结束节点,问你从开始走到结束的最小时间,其中,#代表这个点有毒气,身上必须带着氧气瓶才行,B代表每次进入这个点可以带一个氧气瓶,最多身上带五个,P代表进入这个点加速 ...
- 「CF#554 div2」题解
A 水题一道. 题目的大致意思就是:给你两个集合,求集合间有多少数对和是奇数. 题解,开\(4\)个桶后,求一个\(min\)就可以了. #include <bits/stdc++.h> ...
- CF487E Tourists--圆方树
既然有这条性质,这题就很简单了: \(可能在a->b的简单路径上的点集,就是圆方树上a->b路径上方点代表的点双的并集\) 对每一个方点维护一个\(multiset\),代表其在圆方树上子 ...
- 攻防常用命令(linux)
1.修改SSH密码: #登录SSH passwd 出现current passwoed或new password 输入就密码再输入新密码确认或直接输入新密码确认即可 2.修改Mysql密码: 1.在m ...
- 爬虫综合大作业——网易云音乐爬虫 & 数据可视化分析
作业要求来自于https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3075 爬虫综合大作业 选择一个热点或者你感兴趣的主题. 选择爬取的对象 ...
- kubernetes 部署
kubernetes 部署(Centos 7) 一个或者多个兼容 deb 或者 rpm 软件包的操作系统,比如 Ubuntu 或者 CentOS 每台机器 2 GB 以上的内存,内存不足时应用会受限制 ...
- [源码分析]AbstractStringBuilder
[源码分析]AbstractStringBuilder Java中, AbstractStringBuilder是 StringBuilder 和 StringBuffer 的父类. 所以了解Stri ...
- Java调用第三方http接口的方式
1. 概述 在实际开发过程中,我们经常需要调用对方提供的接口或测试自己写的接口是否合适.很多项目都会封装规定好本身项目的接口规范,所以大多数需要去调用对方提供的接口或第三方接口(短信.天气等). 在J ...
- jquery实现点击页面空白处,弹框消失
要求:点击1,弹框2显示,点击空白处,弹框2消失 $("#AddDevices"):按钮1 $(".addDeviceBox")弹框2 //点击添加设备弹框 $ ...
- vue老司机
你和答案之间只差一个关键字 1.对象二级查找值渲染早于数据获取 解决vue.js 数据渲染成功仍报错的问题