1、删除字符串中所有的*号(不得使用字符串函数)。例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容则应当是ABCDEFG。
时间: 2024-06-19 21:02:28 浏览: 28
可以使用双指针来实现删除字符串中所有的*号。具体实现方法如下:
1. 定义两个指针 i 和 j,初始值都为 0。
2. 使用循环,将 j 向后移动,当遇到非 * 的字符时,将其赋值给 s[i],同时将 i 向后移动一位。
3. 最终将 s 到 s[i-1] 的字符组成的子串作为删除 * 后的字符串。
以下是代码实现:
```
#include <iostream>
using namespace std;
void removeStars(char s[]) {
int i = 0, j = 0;
while (s[j]) {
if (s[j] != '*') {
s[i++] = s[j];
}
j++;
}
s[i] = '\0';
}
int main() {
char s[] = "****A*BC*DEF*G*******";
removeStars(s);
cout << s << endl; // 输出 ABCDEFG
return 0;
}
```
相关问题
假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是: 除了字符串前导和尾部的*号之外,将串中其它*号全部删除。形参h已指向字符串中第一个字母,形参p已指向字符串中最后一个字母。在编写函数时,不得使用C语言提供的字符串函数。 例如,字符串中的内容为:****A*BC*DEF*G********,删除后,字符串中的内容应当是:****ABCDEFG********。在编写函数时,不得使用C语言提供的字符串函数。
好的,这是一个比较简单的字符串处理题目。我们可以使用两个指针,一个指向字符串的头部,一个指向字符串的尾部,然后分别向中间移动指针,遇到*号就跳过,遇到字母就将其复制到前面的位置。具体实现可以参考下面的代码:
```c
void fun(char *h, char *p) {
char *src = h;
char *dst = h;
while (*src == '*') { // 跳过开头的*
src++;
}
while (p > src && *p == '*') { // 跳过结尾的*
p--;
}
while (src <= p) { // 复制非*号的字符
if (*src != '*') {
*dst = *src;
dst++;
}
src++;
}
while (dst <= p) { // 将剩余的位置填充*
*dst = '*';
dst++;
}
}
```
这个函数的思路比较简单,首先跳过字符串头部和尾部的*号,然后将指针src从头部向尾部移动,遇到非*号的字符就复制到指针dst所指的位置。最后,将剩余的位置填充*号即可。
C语言编写规定输入的字符串中只包含字母和*号。编写函数fun,其功能是:删除字符串中所有的*号。编写函数时,不得使用C语言提供的字符串函数。例如,字符串中的内容为:****A*BC*DEF*G*******删除后字符串中的内容应当是:ABCDEFG。
可以编写如下的函数来实现删除字符串中所有的*号:
```c
void fun(char *str) {
int i, j;
for (i = 0, j = 0; str[i] != '\0'; i++) {
if (str[i] != '*') {
str[j++] = str[i];
}
}
str[j] = '\0';
}
```
这个函数中使用了两个指针 i 和 j,其中 i 指向原始字符串中当前要处理的字符,j 指向新字符串中当前要存储的位置。当 i 指向的字符不是*号时,就将它存储到新字符串中,并将 j 向后移动一个位置。当 i 遍历完整个字符串后,将新字符串的结尾标记设置为'\0'。
阅读全文