先学习了一下如何c++ 数字与字符串的相互转换
首先推荐用用C++的stringstream。
主要原因是操作简单。
数字转字符串,int float类型 同理
#include
#include
int main(){
double a = 123.32;
string res;
stringstream ss;
ss << a;
ss >> res;//或者 res = ss.str();
return 0;
}
字符串转数字,int float类型 同理
int main(){
string a = "123.32";
double res;
stringstream ss;
ss << a;
ss >> res;
return 0;
}
上面方法的优点就是使用简单方便,确定可能会相对别的方法来说慢一点.
贴本题的code:
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
string getResult(long data){
string res = ""; string temp;
while (data != 1)
{
for (int i = 2; i <= data; i++)
{
if (data%i == 0)
{
data /= i;
//res +=i+'0';//只对一位数有效.超过两位数并非预期,例如11输出";"
stringstream ss;
ss << i;
ss >> temp;
res += temp;
res += " ";
break;//只要能被i整除,i总是从2开始
}
}
}
return res;
}
int main(){
long DInput;
while (cin >> DInput)
{
cout << getResult(DInput) << endl;
}
return 0;
}
主要熟悉了C++ map遍历
map<int, int> _map;
map<int, int>::iterator iter;
iter = _map.begin();
while(iter != _map.end()) {
cout << iter->first << " : " << iter->second << endl;
iter++;
}
本题code:
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
void Merge(vector<pair<int, int>>res)
{
map<int, int>M;
for (int i=0; i < res.size(); i++)
{
M[res[i].first]+=res[i].second;
}
map<int, int>::iterator iter=M.begin();
while (iter!=M.end())
{
cout << iter->first << " " << iter->second << endl;
iter++;
}
}
int main(){
int n; vector<pair<int, int>> res;
while (cin>>n)
{
while (n--)
{
int a, b;
cin >> a >> b;
res.push_back(make_pair(a, b));
}
Merge(res);
}
return 0;
}
这个函数还是用的不熟,string substr (size_t pos = 0, size_t len = npos) const;
substr
s.substr(begin, end-begin);第一个是起始位置,第二个代表是长度。
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
void RevStr(string &s, int l, int r)
{
while (l<r)
{
swap(s[l++], s[r--]);
}
}
string ReverseHelp(string s){
string res = "";
//预处理 非构成单词的字符均视为单词间隔符
for (int i = 0; i < s.length();i++)
if ((s[i] >= 'a'&&s[i] <= 'z') || (s[i] >= 'A'&&s[i] <= 'Z'))
continue;
else
s[i] = ' ';
//去除前后空格
int i = 0, j = s.length() - 1;
while (i < s.length() && s[i] == ' ')i++;
while (j >=0 && s[j] == ' ')j--;
s = s.substr(i, j - i+1);
RevStr(s, 0, s.length() - 1);
int begin = 0, end = 0;
while (begin<s.length() && end<s.length())
{
while (end < s.length() && s[end] == ' ')end++;//跳过空格
begin = end;
while (end < s.length() && s[end] != ' ')end++;//寻找下一个空格
RevStr(s, begin, end - 1);
res += s.substr(begin, end-begin);
res +=' ';
}
return res.substr(0,res.length()-1);
}
int main(){
string s;
while (getline(cin,s))//不能使用cin>>s;使用getline可以把空格当作字符串一部分
{
cout << ReverseHelp(s);
}
return 0;
}