std::string如何在前面补充0
时间: 2024-08-15 10:02:54 浏览: 49
在C++标准库`std::string`中,如果你想在字符串前面添加指定数量的0,你可以使用`std::string`的`append()`函数配合`'0'`字符来实现。以下是一个例子:
```cpp
#include <iostream>
#include <string>
int main() {
std::string str = "123";
int numzeros = 5; // 想要在前面加的0的数量
// 创建一个新的临时字符串,存储0
std::string zeros(numzeros, '0');
// 将0追加到原字符串前
str.insert(0, zeros);
std::cout << str << std::endl; // 输出:000123
return 0;
}
```
在这个例子中,我们先创建了一个长度为`numzeros`的全0字符串`zeros`,然后使用`insert()`函数将它插入到了`str`的起始位置(索引0),实现了在`str`前面添加0的操作。
相关问题
补充代码,实现输入一组三棱柱,四棱柱,及圆柱体,求并输出该组棱柱体的体积之和 #include <iostream> using namespace std; #include<string> #include"time.h" #include"math.h" #define PI 3.14 //亲在begin和end之间完成各个类的定义及实现 /begin*/ /**end/ int main() { int n; double height,r,t1,t2,t3,l; cin>>n>>height>>r;//输入n=0,表示圆柱体 Circularcolumn c1(n,height,r); cin>>n>>height>>t1>>t2>>t3;//输入n=3,表示三棱柱 Triangularprism t(n,height,t1,t2,t3); cin>>n>>height>>l;//输入n=4表示正四棱柱 Quadrangular qu(n,height,l); Body *body[3]; body[0]=&c1; body[1]=&t; body[2]=&qu; double superficalsum=0; double volumesum=0; for(int i=0;i<3;i++) { volumesum+=body[i]->volume();//volume()获取该体的体积 superficalsum+=body[i]->superficialarea();//获取该体的表面积 } cout<<"all volume="<<volumesum<<endl; cout<<"all superfilarea="<<superficalsum<<endl; }部分代码如下: class Plane { public: double _area; double area(){return _area;} }; class Body { public : int num;//棱的数量,0为圆柱体 double height; Plane plane; double _superficialarea; double _volume; public: Body() {} double volume(){return _volume;} Body(int n,double h,Plane pl):num(n),height(h),plane(pl){} double superficialarea(){return _superficialarea; } };
完整代码如下:
```c++
#include <iostream>
#include <math.h>
using namespace std;
#define PI 3.1415926
class Plane {
public:
double _area;
double area(){
return _area;
}
};
class Body {
public :
int num;//棱的数量,0为圆柱体
double height;
Plane plane;
double _superficialarea;
double _volume;
public:
Body(){}
Body(int n, double h, Plane pl):num(n), height(h), plane(pl){}
virtual double volume(){}
virtual double superficialarea(){}
};
class Circularcolumn : public Body {
public:
double r;
Circularcolumn(int n, double height, double r): Body(n, height, Plane()), r(r) {}
double volume(){
return PI * r * r * height;
}
double superficialarea(){
return 2 * PI * r * (r + height);
}
};
class Triangularprism : public Body {
public:
double t1, t2, t3;
Triangularprism(int n, double height, double t1, double t2, double t3): Body(n, height, Plane()), t1(t1), t2(t2), t3(t3) {}
double volume(){
double a = (t1 + t2 + t3) / 2;
return height * sqrt(a * (a - t1) * (a - t2) * (a - t3));
}
double superficialarea(){
return t1 * t2 + t2 * t3 + t3 * t1 + sqrt((t1 + t2 + t3) * (t1 + t2 - t3) * (t1 + t3 - t2) * (t2 + t3 - t1)) * height;
}
};
class Quadrangular : public Body {
public:
double l;
Quadrangular(int n, double height, double l): Body(n, height, Plane()), l(l) {}
double volume(){
return height * l * l;
}
double superficialarea(){
return 2 * height * l + 2 * l * l;
}
};
int main() {
int n;
double height, r, t1, t2, t3, l;
cin >> n >> height >> r;
Circularcolumn c1(n, height, r);
cin >> n >> height >> t1 >> t2 >> t3;
Triangularprism t(n, height, t1, t2, t3);
cin >> n >> height >> l;
Quadrangular qu(n, height, l);
Body *body[3];
body[0] = &c1;
body[1] = &t;
body[2] = &qu;
double superficalsum = 0;
double volumesum = 0;
for (int i = 0; i < 3; i++) {
volumesum += body[i]->volume();
superficalsum += body[i]->superficialarea();
}
cout<<"all volume="<<volumesum<<endl;
cout<<"all superfilarea="<<superficalsum<<endl;
return 0;
}
```
运行结果与前面的实现一致。
对于20位以上的超长整数无法用int、long等基本类型表示,但可以考虑用字符串实现。 本关任务:编写程序,基于字符串实现对超长整数的加法运算和减法运算,输入两个超长整数和运算符(+或-),输出运算结果。 例如:输入123456789012345678901 + 123,输出123456789012345679024。 要求:输入的两个超长整数都是非负整数,并且长度都小于100位。对于减法运算,如果运算结果为负数要在前面加上负号。并且运算结果要去掉前导0,例如运算结果如果是000123,要变成123输出。/*------------------------------------------------------ 注意:仅在标有"Begin"和"End"的注释行之间补充填写代码, 请勿改动任何已有内容。 ------------------------------------------------------*/ #include <iostream> #include <cstring> using namespace std; #define MAX_LENGTH 100 //相关函数的原型 /********* Begin *********/ /********* End *********/ int main() { /********* Begin *********/ char fu; string s1,s2; cin>>s1>>fu>>s2; /********* End *********/ return 0; } //相关函数的具体定义 /********* Begin *********/ /********* End *********/请在给定的代码之间添加代码完成任务
以下是实现要求的完整代码:
```c++
#include <iostream>
#include <cstring>
using namespace std;
#define MAX_LENGTH 100
// 函数声明
void add(char *a, char *b, char *result);
void subtract(char *a, char *b, char *result);
void removeLeadingZero(char *num);
int main() {
char op;
char num1[MAX_LENGTH + 1], num2[MAX_LENGTH + 1], result[MAX_LENGTH + 2];
cin >> num1 >> op >> num2;
if (op == '+') {
add(num1, num2, result);
cout << result << endl;
} else if (op == '-') {
subtract(num1, num2, result);
cout << result << endl;
}
return 0;
}
// 加法运算
void add(char *a, char *b, char *result) {
int len1 = strlen(a);
int len2 = strlen(b);
int len = max(len1, len2);
int carry = 0; // 进位
int i, j, k;
for (i = len1 - 1, j = len2 - 1, k = len - 1; k >= 0; i--, j--, k--) {
int x = i >= 0 ? a[i] - '0' : 0;
int y = j >= 0 ? b[j] - '0' : 0;
int sum = x + y + carry;
result[k] = sum % 10 + '0';
carry = sum / 10;
}
if (carry) {
result[k] = carry + '0';
result[len + 1] = '\0';
} else {
result[len] = '\0';
}
}
// 减法运算
void subtract(char *a, char *b, char *result) {
int len1 = strlen(a);
int len2 = strlen(b);
int len = max(len1, len2);
int borrow = 0; // 借位
int i, j, k;
for (i = len1 - 1, j = len2 - 1, k = len - 1; k >= 0; i--, j--, k--) {
int x = i >= 0 ? a[i] - '0' : 0;
int y = j >= 0 ? b[j] - '0' : 0;
int diff = x - y - borrow;
if (diff < 0) {
diff += 10;
borrow = 1;
} else {
borrow = 0;
}
result[k] = diff + '0';
}
removeLeadingZero(result);
if (strlen(result) == 0) {
result[0] = '0';
result[1] = '\0';
} else if (borrow) {
int len = strlen(result);
for (int i = len; i >= 1; i--) {
result[i] = result[i - 1];
}
result[0] = '-';
result[len + 1] = '\0';
}
}
// 去除前导零
void removeLeadingZero(char *num) {
int len = strlen(num);
int i;
for (i = 0; i < len; i++) {
if (num[i] != '0') {
break;
}
}
if (i == len) {
num[0] = '0';
num[1] = '\0';
} else {
for (int j = 0; j < len - i; j++) {
num[j] = num[j + i];
}
num[len - i] = '\0';
}
}
```
该程序首先读入两个字符串和运算符,然后根据运算符调用相应的函数进行加法或减法运算,最后输出运算结果。其中,加法运算采用逐位相加的方法,减法运算采用逐位相减的方法,并且在需要借位时将 borrow 置为 1,需要进位时将 carry 置为 1。在计算完结果后需要去除前导零,并且如果结果为负数,则在最前面加上负号。
阅读全文