笔者两种语言双修 但总是混淆语法 特地写此贴记录一下
牢景
acwing@牢景又双叒叕站起来了
csdn@牢景_aila
github@qiuge6
string的操作方法
读取
c++ 可以cin>>string 0下标为起点 s=“ ”+s 1下标为起点
也可以cin>>字符数组 如果要修改 一般是用字符数组
java
Scanner sc= new Scanner(System.in);
String s ;
s=sc.next();
s=sc.nextLine();
s.toCharArray()//转换成字符数组
替换
c++ s.replace(pos,个数,str)
java
String s="114514" ;
String rep = s.replaceAll("1", "s") ;
System.out.println(rep);//ss45s4
截取
c++ s.substr(pos,个数)
java
String substring(int beginIndex)
返回一个新的字符串,它是此字符串的一个子字符串。
String substring(int beginIndex, int endIndex)
返回一个新字符串,它是此字符串的一个子字符串。
查找
c++ s.find (str, pos) 返回找到的位置索引,-1表示查找不到子串
java
int indexOf(String str) 返回指定字符在此字符串中第一次出现处的索引,-1表示查找不到子串
下标获取
c++ 直接 s[i]
java char c = s.charAt(i)
连接 都使用+即可
set
c++
不重复 内部有序
set<int> s;
s.find(element)
s.insert(element)
for(set<int>::iterator it = s.begin(); it != s.end(); it++)
cout << *it << " ";
java
HashSet<String> sites = new HashSet<String>();
sites.add("Google");
sites.contains("Taobao")
for (String i : sites) {
System.out.println(i);
}
map
映射
c++
map会按照键的顺序从小到大自动排序,键的类型必须可以比较大小
map<string, string> mp
mp.insert()
mp.erase(key)
mp.find(key)
返回键为key的映射的迭代器 注意:用find函数来定位数据出现位置,它返回一个迭代器。当数据存在时,返回数据所在位置的迭代器,数据不存在时,返回mp.end()
mp[1] = 2;
mp[2] = 3;
java
HashMap<Integer, String> Sites = new HashMap<Integer, String>();
// 添加键值对
Sites.put(1, "Google");
Sites.get(3)
for (Integer i : Sites.keySet()) {
System.out.println("key: " + i + " value: " + Sites.get(i));
}
// 返回所有 value 值
for(String value: Sites.values()) {
// 输出每一个value
System.out.print(value + ", ");
}
stack
c++
s.push(ele)
queue
c++
q.push(element)
priority_queue
c++
priority_queue<int> pq; // 默认大根堆, 即每次取出的元素是队列中的最大值 priority_queue<int, vector<int>, greater<int>> q; // 小根堆, 每次取出的元素是队列中的最小值
struct node { int x, y;
bool operator < (const Point &a) const {
//直接传入一个参数,不必要写friend return x < a.x;//按x升序排列,x大的在堆顶 }
};
map插入
c++
unordered_map<string, int> cnt;
for (string v : watchedVideos[t]) {
cnt[v]++;
}
jv
Map<String,Integer> cnt = new HashMap();
for(String v:video){
cnt.put(v,cnt.getOrDefault(v,0)+1);
}
map转换数组
c++
// 提取键并存储到vector中
vector<string> ans;
for (const auto& pair : cnt) {
ans.push_back(pair.first);
}
jv
List<String> ans=new ArrayList(cnt.keySet());
lambda排序
c++
sort(ans.begin(), ans.end(), [&](const string& a, const string& b) {
int count1 = cnt[a], count2 = cnt[b];
if (count1 != count2) {
return count1 < count2;
} else {
return a < b;
}
});
jv
Collections.sort(ans,(a,b)->{
int count1 = cnt.get(a), count2 = cnt.get(b);
if (count1 != count2) {
return count1 - count2;
} else {
return a.compareTo(b);
}
});