利用指针将字符串尾部连续的*移到开头
时间: 2024-06-14 08:05:14 浏览: 11
以下是利用指针将字符串尾部连续的*移到开头的示例代码:
```c
#include <stdio.h>
void moveStars(char* s) {
char* p = s;
char* q = s;
int n = 0;
// 计算尾部连续的*号个数
while (*p != '\0') {
p++;
}
p--;
while (*p == '*') {
n++;
p--;
}
// 将尾部连续的*号移到开头
while (*q != '\0') {
*(q - n) = *q;
q++;
}
for (; n > 0; n--) {
*(q - n) = '*';
}
}
int main() {
char s[81] = "***ABC*DFG*HJ";
moveStars(s);
printf("%s\n", s);
return 0;
}
```
运行结果为:`***ABC*DFG*HJ`
相关问题
编写C语言程序:利用指针实现只含有字母和*号的字符串处理,将字符串尾部连续的*号全部删除,利用子函数void strdel(char *s)
好的,您的第一个问题是关于编写一个只含有字母和*号的字符串处理程序,使用指针实现将尾部的连续*号删除的方法,正确吗?那么让我来为您解决这个问题。
以下是该程序的代码实现:
```c
#include <stdio.h>
#include <string.h>
void strdel(char *s) {
int len = strlen(s);
while (len > 0 && s[len - 1] == '*') {
s[--len] = '\0';
}
}
int main() {
char str[100];
printf("请输入一个只含有字母和*号的字符串:");
scanf("%s", str);
strdel(str);
printf("删除连续*号之后的字符串为:%s\n", str);
return 0;
}
```
该程序首先定义了一个 `void` 类型的子函数 `strdel(char *s)`,该函数传入一个指针类型的字符串参数 `s`。该函数利用指针遍历字符串的尾部,找到连续的 * 号并将其删除,最后返回处理后的字符串。
随后,在 `main` 函数中,首先定义了一个字符串类型的变量 `str`,然后提示用户输入只含有字母和*号的字符串。随后调用 `strdel` 函数,将处理后的字符串输出。
希望这个程序能够帮助您解决问题。如果您还有其他问题,请随时向我提问。
编写C语言程序:利用指针实现只含有字母和*号的字符串处理。将字符串尾部连续的*号全部删除,使用子函数void strdel(char *s)
这是一个比较基础的 C 语言编程问题。首先我们需要遍历字符串,找到最后一个不是*的字符的位置,然后将该位置之后的所有字符都替换为'\0'。
接下来是具体的代码实现:
```c
#include <stdio.h>
#include <string.h>
void strdel(char *s) {
int len = strlen(s);
int i, j;
for (i = len - 1; i >= 0; i--) {
if (s[i] != '*') {
break;
}
}
if (i < len - 1) {
s[i+1] = '\0';
}
}
int main() {
char s[100];
printf("请输入字符串:\n");
scanf("%s", s);
strdel(s);
printf("处理后的字符串为: %s\n", s);
return 0;
}
```
上面的代码定义了一个名为`strdel`的函数,该函数接受一个指向字符串的指针作为参数。函数内部通过遍历字符串找到最后一个不是*的字符,并将其之后的所有字符都替换为'\0'。
然后我们在`main`函数中调用`strdel`函数,将用户输入的字符串作为参数传递给它。最后打印出处理后的字符串即可。
需要注意的是,这里的字符串处理是在原有字符串上直接进行的,因此对原有字符串的修改是永久性的。如果需要保留原有字符串的话,可以先将其复制到另一个变量中再进行修改。