C++中满足一定条件的输出技巧

  • 字符串

按一定宽度输出字符串

用空格填充多余位置

#include <bits/stdc++.h>
using namespace std;
int main() {
    long long num = 1;
    int len = 8;
    cout<<std::right<<setw(len)<<num;
    cout<<std::left<<setw(len)<<num;
    return 0;
}

用给定字符填充多余位置

#include <bits/stdc++.h>
using namespace std;
int main() {
    long long num = 1;
    int len = 8;
    cout<<std::right<<setfill('*')<<setw(len)<<num<<endl;
    cout<<std::left<<setfill('*')<<setw(len)<<num<<endl;

    return 0;
}

按行输入并输出

#include <bits/stdc++.h> 
using namespace std; 
int main() { 
string line; 
getline(cin, line); 
cout<<line; 
return 0; 
}

分词

1、按空字符切分:

#include <bits/stdc++.h>
using namespace std;

int main() {
	string line, x;
	stringstream ss;
	getline(cin, line);
	ss<<line;
	while(ss>>x){
		cout<<x<<" ";
	}
	return 0;
}

2、按照拉丁字母分块:

int main(){
    string line;
    getline(cin, line);
    string x; x.clear();
    for(int i = 0; i < line.size(); i++) {
        if(isalpha(line[i])) {
            x += line[i];
        }
        else {
            cout<<x;
        }
    }

    return 0;
}

3、按照字母数字分块

#include<bits/stdc++.h>
using namespace std;


int minn = 0x3f3f3f3f, maxn = 0;
string minn_s, maxn_s;

void upd(string x){
    if(x.size() < minn) {
        minn = x.size();
        minn_s = x;
    }
    if(x.size() > maxn) {
        maxn = x.size();
        maxn_s = x;
    }
}

int main(){
	
    string line;
    getline(cin, line);
    string x; x.clear();
    for(int i = 0; i < line.size(); i++) {
        if(isalnum(line[i])) {
            x += line[i];
        }
        else {
            cout<<x<<endl;
            x.clear();
        }
    }

    return 0;
}

字符串前缀匹配

#include <bits/stdc++.h>
using namespace std;


int main() {
    const int N = 3;
    string s[N] = {"un","in", "ab"};
    string line;
    cin>>line;
    for(int i = 0; i < N; i++) {
        if(line.substr(0, s[i].size()) == s[i]) {
            cout<<s[i]<<endl;
        }
    }
    return 0;
}

字符串尾缀匹配

#include <bits/stdc++.h>
using namespace std;


int main() {
    const int N = 3;
    string s[N] = {"ing","er", "ly"};
    string line;
    cin>>line;
    for(int i = 0; i < N; i++) {
        if(line.substr(line.size()-s[i].size()) == s[i]) {
            cout<<s[i]<<endl;   
        }
    }
    return 0;
}

子字符串位置搜索

#include <bits/stdc++.h>
using namespace std;


int main() {
    string line;
    getline(cin, line);
    string target = "Apple";
    string::size_type idx = line.find(target); //searching from left side
    string::size_type ridx = line.rfind(target); //searching from right side
    if(idx == string::npos) cout<<"Not Found!"; // if(ridx == string::npos) cout<<"Not Found!";
    return 0;
}

子字符串大小写转换

transform方式 

子串转换之后的结果保存在一个新字符串y中,只有区间片段!

如果将第三个参数y.begin(),换成x.begin() 则以部分区间修改的方式得到结果。

#include <bits/stdc++.h>
using namespace std;

int main() {
	string x, y;
	cin>>x;

	int start, len;
	start = 0; // x[start]
	len = 3; // ~x[start+len-1]
	y.resize(len);

	transform(x.begin()+start, x.begin()+start+len, y.begin(),::toupper);// ::tolower
	cout<<y<<endl;
	
	return 0;
}

toupper/ tolower 方式

结果以原字符串上部分区间修改的方式得到结果。

#include <bits/stdc++.h>
using namespace std;

int main() {
	string x, y;
	cin>>x;

	int start, len;
	start = 0;
	len = 3;
	
	for(int i = start; i < start + len; i++) {
		x[i] = toupper(x[i]);
	}

	cout<<x<<endl;
	return 0;
}

字符串与数值的转换

#include <bits/stdc++.h>
using namespace std;

int main() {
	string line = "3.14";
	// getline(cin, line);

	stringstream ss;
	ss << line;

	float pi;
	ss>>pi;
	
	cout<<pi<<endl;

	return 0;
}
  • 实数

满足精度的浮点类型输出

#include <bits/stdc++.h>
using namespace std;

int main() {
	float pi = 3.14159;
	cout<<fixed<<setprecision(2)<<pi<<endl;
	//cout.unsetf(ios::fixed);

	return 0;
}

 带符号的数值输出

#include <bits/stdc++.h>
using namespace std;

int main() {
	float pi = 3.14666;
	cout<<showpos<<pi<<endl;
	cout<<noshowpos;

	return 0;
}

数学表达式输出

P(n) = a_0 + a_1x + a_2x^2 + \cdots + a_nx^n

#include <bits/stdc++.h>
using namespace std;

const int MAXN = 5;
int a[MAXN] = {1,1,3,4,5}; //coefficient array

//P_n = a_0 + a_1x + a_2x^2 + \cdots + a_nx^n

int main() {
	stringstream ss;

	if(a[0]!=0) ss<<a[0]; //a0*x^0
    if(a[1]!=0) ss<<a[1]<<"x";
	for(int i = 2; i < MAXN; i++) 
		if(a[i]!=0) ss<<showpos<<a[i]<<"x^"<<noshowpos<<i;

	cout<<ss.str();
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值