假定输入的字符串中只包含字母和* 号。请编写函数fun,它的功能是除了字符串前导的*号之外,将串中其他*号全部删除。在编写函数时,不得使用C语言提供的字符串函数。例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容则应当是****ABCDEFG。
输入
字符串
输出
除了前导的*号之外,其他*号全部删除的字符串
样例
标准输入复制文本 |
****A*BC*DEF*G******* |
标准输出复制文本 |
****ABCDEFG |
标准输入复制文本 |
**asd*s |
标准输出复制文本 |
**asds |
标准输入复制文本 |
*1*2*3*4 |
标准输出复制文本 |
*1234 |
解析:明显用指针解
#include <bits/stdc++.h>
void fun(char *a)
{
int i=0;
char *p=a;
//保留前面的*
while(*p&&*p=='*')
{
a[i]=*p;
i++;
p++;
}
//删除后面的*
while(*p)
{
if(*p!='*')
{
a[i]=*p;
i++;
}
p++;
}
a[i]='\0';
}
int main()
{
char s[80];
gets(s);
fun(s);
puts(s);
return 0;
}
解析2:不使用指针
#include <iostream>
#include <string>
using namespace std;
string removeStars(const string& input) {
string result = "";
// 处理前导的*号
size_t i = 0;
while (i < input.size() && input[i] == '*') {
result += '*';
i++;
}
// 处理中间的字符,跳过*号
while (i < input.size()) {
if (input[i] != '*') {
result += input[i];
}
i++;
}
return result;
}
int main() {
string input;
getline(cin, input);
string result = removeStars(input);
cout << result << endl;
return 0;
}
这个程序定义了一个名为 removeStars
的函数,该函数接受一个字符串作为参数,返回一个新的字符串,其中删除了除前导的 * 号之外的所有 * 号。在主函数中,程序从标准输入读取字符串,调用 removeStars
函数并输出结果。