string的各种用法
字符串转数字 stringstream
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| #include<bits/stdc++.h> using namespace std; int a[10000]; int main() { int n; string line; getline(cin,line); stringstream ss(line); while(ss>>a[n]) n++; sort(a,a+n); for(int i=0;i<n;i++) { cout<<a[i];if(i!=n-1) cout<<"->"; } return 0; }
|
遍历 标记
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| #include<bits/stdc++.h> using namespace std; int book[256]; int main() { string a; string b; getline(cin, a); getline(cin, b); for(int i=0;i<a.length();i++) { book[a[i]]=1; } for(int i=0;i<b.length();i++) { book[b[i]]=0; } for(int i=0;i<a.length();i++) { if(book[a[i]]==1) cout<<a[i]; } }
|
四舍五入
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| #include<iostream> #include<cmath> using namespace std; int main() { double a=2.5; cout<<ceil(a)<<endl; cout<<floor(a)<<endl; cout<<round(a)<<endl; cout<<(int)a<<endl; cout<<(a>(int)a?(int)a+1:(int)a)<<endl; cout<<(int)(a+0.5)<<endl; return 0; }
|
c++ isdigit()函数
判断某个字符型是否为数字
例如
1 2 3 4 5 6 7
| int main() { char c; while (cin>>c) { if (isdigit(c)) { cout<<c<<"是数字"<<endl; } else cout<<c<<"不是数字"<<endl;
|
is stringstream 分割字符 分段
1 2 3 4 5 6 7 8 9 10 11 12 13
| /Example:可以用于分割被空格、制表符等符号分割的字符串 #include<iostream> #include<sstream> #include<string> using namespace std; int main(){ string str="i am a boy"; istringstream is(str); string s; while(is>>s) { cout<<s<<endl; } }
|
string 分割数字
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| #include <cstring> #include <sstream> #include <iostream> #include <algorithm>
using namespace std;
const int N = 10010;
int n; int a[N];
int main() { int cnt; cin>>cnt; string line="112 333 444 555 666 777 8888 999"; while(cnt--) { stringstream ss(line); while(ss>>a[n]) { cout<<a[n]<<endl;;n++;}
}
}
|
string 分段单个字符
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| #include <cstring> #include <sstream> #include <iostream> #include <algorithm>
using namespace std;
const int N = 10010;
int n; int a[N]; string nn; int main() { int cnt; cin>>cnt; string line=" i am a boy www hhh aahasdh"; while(cnt--) { stringstream ss(line); while(ss>>nn[n]) { cout<<nn[n]<<endl;;n++;}
}
}
|
string 直接转数字
string类型转换int类型
1 2 3 4 5 6 7
| string类型转换int类型
C++转换形式(C++11):
... std::string str; int i = std::stoi(str);
|
字符串拼接和返回指定位置字符串
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| #include<iostream> #include<string> using namespace std; int main(){ int l; char ch; cin>>l>>ch; getchar(); string str; getline(cin,str); if(str.length()<=l){ while(str.length()!=l) str=ch+str; cout<<str; } else cout<<str.substr(str.length()-l,l); return 0; }
|
cin>>和getline
cin>>与getline的工作方式,流提取运算符根据它后面的变量类型读取数据,从非空白符号开始,遇到Enter、Space、Tab键时结束。getline函数从istream中读取一行数据,当遇到“\n”时结束返回。
造成程序错误结果的原因是,用户输入完年龄后按回车结束输入,把“\n”留在了输入流里,而cin不会主动删除输入流内的换行符,这样换行符就被getline读取到,getline遇到换行符返回,因此程序不会等待用户输入。
解决的办法是手动清除换行符,在cin>>后加上
筛选因子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| #include <iostream> #include <cstring> #include <algorithm>
using namespace std;
int main() { int n=24; int a[100]; int len=0; for(int i=1;i*i<n;i++) { if(n%i==0) { a[len++]=i; if(i!=(n/i)) a[len++]=n/i; } } for(int i=0;i<len;i++) { cout<<a[i]<<endl; } }
|