题目:将字符串中最前面和最后面的*号去掉,并将字符串中间1 ++++++个或多个连续的*号替换为1个空格。 例如:初始字符串为"*****this*is****C****pro****",
时间: 2023-11-16 19:06:05 浏览: 367
c++ 二维字符矩阵,字符串查找
5星 · 资源好评率100%
经过处理后,字符串应为"this is C pro"。
--回答--:
题目要求我们将字符串中最前面和最后面的*号去掉,并将字符串中间1个或多个连续的*号替换为1个空格。我们可以按照以下步骤来实现:
1. 首先,我们需要去掉字符串最前面和最后面的*号。我们可以使用指针来遍历字符串,找到第一个不是*号的字符和最后一个不是*号的字符,然后将它们之间的部分复制到一个新的字符串中。
2. 接着,我们需要将字符串中间1个或多个连续的*号替换为1个空格。我们可以再次使用指针来遍历新的字符串,找到连续的*号,然后将它们替换为1个空格。
下面是具体的实现代码:
```
void processString(char *str) {
// 去掉最前面的*号
char *p = str;
while (*p == '*') {
p++;
}
// 去掉最后面的*号
char *q = str + strlen(str) - 1;
while (*q == '*') {
q--;
}
// 复制中间部分到新的字符串中
char *newStr = (char*)malloc(q - p + 2);
strncpy(newStr, p, q - p + 1);
newStr[q - p + 1] = '\0';
// 将中间的*号替换为空格
p = newStr;
while (*p != '\0') {
if (*p == '*' && *(p + 1) == '*') {
char *q = p + 1;
while (*q == '*') {
q++;
}
*p = ' ';
p = q;
} else {
p++;
}
}
// 输出结果
printf("%s\n", newStr);
// 释放内存
free(newStr);
}
// 调用函数
char str[] = "*****this*is****C****pro****";
processString(str);
--相关问题--:
阅读全文