string StrTrim(string s){ if(s.empty()) return s; s.erase(0,s.find_first_not_of(" ")); s.erase(s.find_last_not_of(" ")+1); return s; }
时间: 2024-04-20 20:25:10 浏览: 105
这段代码是一个字符串去除空格的函数。它首先检查字符串是否为空,如果为空则直接返回空字符串。接下来,它使用`find_first_not_of`函数找到字符串中第一个非空格字符的位置,并使用`erase`函数删除从字符串开头到该位置之间的所有字符。然后,它使用`find_last_not_of`函数找到字符串中最后一个非空格字符的位置,并使用`erase`函数删除从该位置到字符串结尾之间的所有字符。最后,返回处理后的字符串。
简而言之,这个函数的作用是去除字符串两端的空格。
相关问题
#include <iostream> #include <cstring> using namespace std; #define MAX_LENGTH 100 // 字符串逆序 void reverse(string& s) { int left = 0, right = s.length() - 1; while (left < right) { swap(s[left], s[right]); left++, right--; } } // 字符串加法 string add(string num1, string num2) { // 字符串逆序 reverse(num1), reverse(num2); // 用 0 补齐,使它们的长度相等 if (num1.length() < num2.length()) { num1 += string(num2.length() - num1.length(), '0'); } else { num2 += string(num1.length() - num2.length(), '0'); } // 从低位开始,将两个字符串对应位相加,考虑进位,将结果存到一个新的字符串中 string result; int carry = 0; for (int i = 0; i < num1.length(); i++) { int s = num1[i] - '0' + num2[i] - '0' + carry; carry = s / 10; result += to_string(s % 10); } // 如果最高位有进位,则将进位也加上 if (carry > 0) { result += to_string(carry); } // 字符串逆序,删除前导 0,输出结果 reverse(result); result.erase(0, result.find_first_not_of('0')); if (result.empty()) { result = "0"; } return result; } // 字符串减法 string subtract(string num1, string num2) { // 比较被减数和减数的大小 if (num1.length() < num2.length() || (num1.length() == num2.length() && num1 < num2)) { swap(num1, num2); num1 = '-' + num1; } // 字符串逆序 reverse(num1), reverse(num2); // 用 0 补齐,使它们的长度相等 num2 += string(num1.length() - num2.length(), '0'); // 从低位开始,将两个字符串对应位相减,考虑借位,将结果存到一个新的字符串中 string result; int borrow = 0; for (int i = 0; i < num1.length(); i++) { int s = num1[i] - '0' - num2[i] + borrow; if (s < 0) { s += 10; borrow = -1; } else { borrow = 0; } result += to_string(s); } // 字符串逆序,删除前导 0,输出结果 reverse(result); result.erase(0, result.find_first_not_of('0')); if (result.empty()) { result = "0"; } return result; } int main() { string num1, num2, op; cin >> num1 >> op >> num2; if (op == "+") { cout << add(num1, num2) << endl; } else { cout << subtract(num1, num2) << endl; } return 0; }
这段代码存在两个问题:
1. 代码中的第一行和第二行之间有一个空格,这会导致编译器无法正确解析头文件。应该将这两行代码合并为一行,去掉中间的空格,即:
#include <iostream>
#include <cstring>
2. 字符串减法中存在一个逻辑错误。在对两个字符串进行减法时,如果被减数小于减数,应该将它们交换位置,并在被减数前加上负号。但是,在这段代码中,交换位置的语句和添加负号的语句是写在两个不同的 if 分支中的,这会导致在被减数和减数相等且都为 0 的情况下出现错误。应该将这两个语句合并为一句:
if (num1.length() < num2.length() || (num1.length() == num2.length() && num1 < num2)) {
swap(num1, num2);
num1 = '-' + num1;
}
修改后的代码如下:
```
#include <iostream>
#include <cstring>
using namespace std;
#define MAX_LENGTH 100
void reverse(string& s) {
int left = 0, right = s.length() - 1;
while (left < right) {
swap(s[left], s[right]);
left++, right--;
}
}
string add(string num1, string num2) {
reverse(num1), reverse(num2);
if (num1.length() < num2.length()) {
num1 += string(num2.length() - num1.length(), '0');
} else {
num2 += string(num1.length() - num2.length(), '0');
}
string result;
int carry = 0;
for (int i = 0; i < num1.length(); i++) {
int s = num1[i] - '0' + num2[i] - '0' + carry;
carry = s / 10;
result += to_string(s % 10);
}
if (carry > 0) {
result += to_string(carry);
}
reverse(result);
result.erase(0, result.find_first_not_of('0'));
if (result.empty()) {
result = "0";
}
return result;
}
string subtract(string num1, string num2) {
if (num1.length() < num2.length() || (num1.length() == num2.length() && num1 < num2)) {
swap(num1, num2);
num1 = '-' + num1;
}
reverse(num1), reverse(num2);
num2 += string(num1.length() - num2.length(), '0');
string result;
int borrow = 0;
for (int i = 0; i < num1.length(); i++) {
int s = num1[i] - '0' - num2[i] + borrow;
if (s < 0) {
s += 10;
borrow = -1;
} else {
borrow = 0;
}
result += to_string(s);
}
reverse(result);
result.erase(0, result.find_first_not_of('0'));
if (result.empty()) {
result = "0";
}
return result;
}
int main() {
string num1, num2, op;
cin >> num1 >> op >> num2;
if (op == "+") {
cout << add(num1, num2) << endl;
} else {
cout << subtract(num1, num2) << endl;
}
return 0;
}
```
class RoomManager { private: // Conference Room 1, the smaller one. // Only require the date information for appointment. set<int> _room1; // Conference Room 2, the bigger one. // Require both date and event information for appointment. map<int, string> _room2; public: // Insert an appointment to the smaller Conference Room (1). bool InsertAppointment(const int& date); // Insert an appointment to the bigger Conference Room (2). bool InsertAppointment(const int& date, const string& event); // Cancel an appointment on designated date. // If room_id == 1, cancel the corresponding appointment of _room1. // If room_id == 2, cancel the corresponding appointment of _room2. bool CancelAppointment(const int& room_id, const int& date); // Print all existing appointments in chronological order. // If room_id == 1, just print the date information. Each piece of information is separated by ' '. // If room_id == 2, print the information in form of "date(event)". Each piece of information is separated by ' '. // If there is no even one existing appointment yet, print "No Appointment". void PrintAppointments(const int& room_id) const; };写完这个代码
,我们可以使用 RoomManager 类来管理两个会议室的预约信息。其中,Conference Room 1 只需要日期信息即可进行预约,而 Conference Room 2 需要日期和事件信息才能进行预约。
下面是完整的 RoomManager 类的代码实现:
```c++
#include <iostream>
#include <set>
#include <map>
using namespace std;
class RoomManager {
private:
// Conference Room 1, the smaller one.
// Only require the date information for appointment.
set<int> _room1;
// Conference Room 2, the bigger one.
// Require both date and event information for appointment.
map<int, string> _room2;
public:
// Insert an appointment to the smaller Conference Room (1).
bool InsertAppointment(const int& date) {
if (_room1.find(date) != _room1.end()) {
// There is already an appointment on this date.
return false;
} else {
_room1.insert(date);
return true;
}
}
// Insert an appointment to the bigger Conference Room (2).
bool InsertAppointment(const int& date, const string& event) {
if (_room2.find(date) != _room2.end()) {
// There is already an appointment on this date.
return false;
} else {
_room2[date] = event;
return true;
}
}
// Cancel an appointment on designated date.
// If room_id == 1, cancel the corresponding appointment of _room1.
// If room_id == 2, cancel the corresponding appointment of _room2.
bool CancelAppointment(const int& room_id, const int& date) {
if (room_id == 1) {
if (_room1.find(date) != _room1.end()) {
_room1.erase(date);
return true;
} else {
// There is no appointment on this date.
return false;
}
} else if (room_id == 2) {
if (_room2.find(date) != _room2.end()) {
_room2.erase(date);
return true;
} else {
// There is no appointment on this date.
return false;
}
} else {
// Invalid room_id.
return false;
}
}
// Print all existing appointments in chronological order.
// If room_id == 1, just print the date information. Each piece of information is separated by ' '.
// If room_id == 2, print the information in form of "date(event)". Each piece of information is separated by ' '.
// If there is no even one existing appointment yet, print "No Appointment".
void PrintAppointments(const int& room_id) const {
if (room_id == 1) {
if (_room1.empty()) {
cout << "No Appointment";
} else {
for (const auto& date : _room1) {
cout << date << " ";
}
}
} else if (room_id == 2) {
if (_room2.empty()) {
cout << "No Appointment";
} else {
for (const auto& appointment : _room2) {
cout << appointment.first << "(" << appointment.second << ") ";
}
}
} else {
// Invalid room_id.
cout << "Invalid room_id";
}
cout << endl;
}
};
int main() {
RoomManager rm;
rm.InsertAppointment(20220101);
rm.InsertAppointment(20220102, "Meeting with John");
rm.InsertAppointment(20220103);
rm.InsertAppointment(20220102, "Meeting with Peter");
rm.PrintAppointments(1);
rm.PrintAppointments(2);
rm.CancelAppointment(1, 20220103);
rm.CancelAppointment(2, 20220102);
rm.PrintAppointments(1);
rm.PrintAppointments(2);
return 0;
}
```
这里的 main 函数演示了 RoomManager 类的使用方法。我们可以看到,通过 RoomManager 类,我们可以方便地进行会议室预约、取消预约和打印预约信息等操作。
阅读全文
相关推荐

















