假定输入的字符串s中只包含字母和*号。编写函数Fun,其功能是:除了尾部的*号之外,将字符串中其它*号全部删除。c++
时间: 2025-01-12 09:02:51 浏览: 28
在C++中,你可以通过遍历字符串并记录最后的非星号字符的位置来实现这个Fun
函数。以下是一个简单的实现方法:
#include <string>
std::string Fun(const std::string& s) {
if (s.empty() || s.back() != '*') {
// 如果字符串为空或者不是以'*'结尾,直接返回原串
return s;
}
int lastNonStar = -1; // 初始化最后一个非星号字符的位置为-1
for (size_t i = 0; i < s.length(); ++i) {
if (s[i] != '*') {
lastNonStar = i; // 更新非星号位置
}
}
// 创建一个新的字符串,仅保留非星号部分
std::string result = s.substr(0, lastNonStar + 1);
return result;
}
相关问题
c++假定输入的字符串s中只包含字母和*号。编写函数Fun,其功能是:除了尾部的*号之外,将字符串中其它*号全部删除。
在C++中,你可以通过遍历字符串并检查字符是否为''来实现这个Fun
函数。当遇到非''字符时,将其添加到结果字符串中;如果遇到'*',则仅在不是字符串结尾的情况下跳过。下面是一个简单的实现示例:
#include <string>
std::string Fun(const std::string &s) {
if (s.empty()) return s; // 如果字符串为空,则直接返回
std::string result;
bool isLastStar = false; // 标记当前字符是否为最后一个*
for (size_t i = 0; i < s.size(); ++i) {
char c = s[i];
if (c != '*') { // 非 '*' 字符直接追加到结果
result += c;
} else { // '*' 字符
if (i + 1 == s.size() || s[i + 1] != '*') { // 非尾部的 '*' 或者 '结束'
isLastStar = true;
break;
}
}
}
// 如果最后一个是'*'并且是尾部,我们不需要它
if (!isLastStar)
result.pop_back();
return result;
}
假定输入的字符串中只包含字母和*号。请编写函数 fun(),它的功能是:除了尾部的*号之外,将字符串中其他*号全部删除。形参p已指向字符串中最后一个字母。在编写函数时,不得使用C语言的字符串函数。
下面是一个可能的实现方式:
void fun(char *p) {
// 首先找到最后一个非*字符的位置
int i = 0;
while (*(p - i) == '*') {
i++;
}
// 从后往前遍历字符串,将非*字符前移
int j = 1;
while (j <= i) {
if (*(p - j) != '*') {
*(p - i) = *(p - j);
i--;
}
j++;
}
// 将剩余位置填充*
while (i >= 0) {
*(p - i) = '*';
i--;
}
}
该函数首先找到最后一个非字符的位置,然后从后往前遍历字符串,将非字符前移,最后将剩余位置填充*。注意,在遍历字符串时,要从后往前遍历,并且使用指针操作,而不是数组下标操作。
相关推荐
















