C语言采用指针将字符串前导星号转移到尾部

写到这一步之后,该如何移动指针,使字符串输出时从“a”开始只输出后面的部分?

img

img

这样改,供参考:

#include <stdio.h>
void fun(char *a)
{
    /****** Begin ******/
    char *p = a;
    int  n = 0, i = 0;
    while (*p == '*'){ //统计前导 * 号
        n++; p++;
    }
    while (*p)  a[i++] = *p++;// 把字符前移
    while (n--) a[i++] = '*';//将 * 号补充到字符串尾
    a[i] = '\0';
    /****** End ******/
}
int main()
{
    char s[81];
    int  n = 0;
    scanf("%s", s);
    fun(s);
    puts(s);
    return 0;
}

程序呢?没看到代码呀!

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7611377
  • 这篇博客也不错, 你可以看下【豆知识】C语言中转义字符“\a”是什么意思?
  • 除此之外, 这篇博客: 4.1 C语言练习(计算车辆行驶的总距离;将字符常量‘A’赋给字符变量的四种方法;大写字母转换成小写字母)中的 【解法一】 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    #include <stdio.h>
    
    int main()
    {
    	char c1, c2, c3, c4;
    	
    	c1 = 'A';
    	c2 = 'B';
    	c3 = c1 + 32;
    	c4 = c2 + 32;
    	
    	printf("The capital letter: %-3c  %-3c\n",c1,c2);
    	printf("  Lowercase letter: %-3c  %-3c\n",c3,c4);
    
    	return 0;
    } 
    

    在这里插入图片描述

  • 以下回答来自chatgpt:

    解决方案:

    可以通过指针来实现将字符串中的前导星号移动到字符串结尾,并输出字符串后面的部分。具体步骤如下:

    1.定义一个指针变量,指向该字符串的首地址。

    2.遍历字符串,判断是否有前导星号,记录前导星号的个数count。

    3.根据count的值,使用循环语句将前导星号移到字符串尾部。

    4.将指针向后移动count个字符。

    5.输出字符串后面的部分,即从该指针所指位置开始的字符串。

    代码如下:

    #include <stdio.h>
    #include <string.h>
    
    int main()
    {
        int count = 0;
        char str[100] = "***hello, world!***"; // 待处理的字符串
        char *p = str; // 定义指针变量,指向该字符串的首地址
    
        // 遍历字符串,计算前导星号的个数
        while (*p == '*') {
            count++;
            p++;
        }
    
        // 将前导星号移动到字符串结尾
        for (int i = 0; i < count; i++) {
            char temp = str[i];
            for (int j = i; j < strlen(str) - 1; j++) {
                str[j] = str[j+1];
            }
            str[strlen(str)-1] = temp;
        }
    
        // 移动指针,指向字符串后面的部分
        p = &str[count];
    
        // 输出字符串后面的部分
        printf("%s\n", p);
    
        return 0;
    }
    

    输出结果为:

    hello, world!***
    

    注:代码中用到了头文件string.h,主要是为了获取字符串长度,以便在移动前导星号时确定循环次数。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^