string?

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> //istringstream 必须包含这个头文件
#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;
}
//substr(返回的的开始位置,长度)

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;

}
}