写一个c语言程序,指针,

用指针(不用函数)写一个程序实现: 删除字符串中的所有某一个字符

将不是这个字符的字符都从字符串开头存放

#Include <stdio.h>
int main()
{  
    char s[1000],*p = s;
    int j=0;
    gets(s);
    char ch;
    getchar(ch);
    while(*p != '\0')
    {
         if(*p != ch)
             s[j++] = *p;
         p++;
    }
    s[j] = 0;
    puts(s);
}

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char str[100];
    char c;
    printf("请输入一个字符串:");
    gets(str);

    printf("请输入要删除的字符:");
    scanf("%c", &c);

    char *p = str; // 定义一个指向字符串的指针
    for (; *p != '\0'; p++) // 遍历整个字符串
    {
        if (*p == c) // 发现要删除的字符
        {
            char *q = p; // 用 q 记录要删除的字符的位置
            while (*q != '\0') // 向后依次移动字符
            {
                *q = *(q+1);
                q++;
            }
            p--; // p 回退一步,保证下一个字符不被漏掉
        }
    }

    printf("删除后的字符串为:%s\n", str);

    return 0;
}

这里用 gets() 函数读入字符串,用 scanf() 函数读入要删除的字符,然后遍历整个字符串,找到要删除的字符的位置,再依次向后移动字符。注意:删除后的字符串中可能存在多个连续的空格,需要对输出做一些处理。

#include <iostream>
#include <cstring>

using namespace std;

int main()
{
    char str[100], ch;
    cout << "请输入一个字符串:";
    cin.getline(str, 100);
    cout << "请输入要删除的字符:";
    cin >> ch;

    char *p = str; // 定义指向字符串的指针
    while (*p != '\0')
    {
        if (*p == ch) // 如果当前字符等于要删除的字符
        {
            char *q = p; // 定义另一个指针指向当前位置
            while (*q != '\0')
            {
                *q = *(q+1); // 将后面的字符依次往前移动一位
                q++;
            }
        }
        else
        {
            p++; // 指针后移
        }
    }

    cout << "删除后的字符串为:" << str << endl;
    
    return 0;
}

img

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7601507
  • 你也可以参考下这篇文章:编写一个C函数,该函数将一个字符串逆序
  • 除此之外, 这篇博客: C语言指针,指针数组和数组指针中的 一、指针是个啥 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 举个例子,在诊所里,有许多的柜子,里面装着不同的药,小时候经常觉得医生拿药是件很神奇的事。
    其实啊,指针也像这么一个个的柜子,只不过里面装着的是每个药的存放地址而这个地址就是指针,这个指针也就指向了这个特别的药

  • 您还可以看一下 黄强老师的精通C语言指针课程中的 指针与一维数组小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    我能解决该问题。

    代码如下:

    include

    include

    define MAX_LEN 100

    int main() { char str[MAX_LEN]; char c; printf("请输入一个字符串:"); fgets(str, MAX_LEN, stdin); // 读取字符串 printf("请输入要删除的字符:"); scanf("%c", &c); // 读取要删除的字符 int len = strlen(str); // 得到字符串的长度 int k = 0; // k表示新字符串的当前索引 for (int i = 0; i < len-1; i++) { // len-1是因为fgets方法会在字符串最后添加一个"\n"字符 if (str[i] != c) { // 如果当前字符不是要删除的字符 str[k++] = str[i]; // 将当前字符添加到新字符串,然后k+1 } } str[k] = '\0'; // 在新字符串最后添加一个"\0"表示字符串的结束 printf("删除后的字符串为:%s\n", str); return 0; }

    该程序的思路是通过一个循环依次遍历原字符串中的每一个字符,如果不是要删除的字符,则添加到一个新的字符串中,最后得到的新字符串就是删除指定字符后的结果,再通过输出语句将其输出即可。在字符串遍历时使用一个新的索引k来记录新字符串当前的位置,可以避免使用指针直接修改字符串,更加方便。

该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
以下是使用指针的C语言程序,用于删除字符串中的所有某一个字符:

#include <stdio.h>
#include <string.h>

void delete_char(char *str, char ch) {
    char *src = str;
    char *dst = str;
    while (*src != '\0') {
        if (*src != ch) {
            *dst = *src;
            dst++;
        }
        src++;
    }
    *dst = '\0';
}

int main() {
    char str[100];
    char ch;

    printf("Enter a string: ");
    fgets(str, sizeof(str), stdin);

    printf("Enter a character to delete: ");
    scanf("%c", &ch);

    delete_char(str, ch);

    printf("After deleting '%c': %s", ch, str);

    return 0;
}

首先,我们定义了一个名为delete_char的函数,它接受一个指向字符数组的指针和一个要删除的字符。该函数使用两个指针srcdst,分别指向字符串中当前字符和最终字符串中的字符。当src指向一个不需要删除的字符时,将其复制到dst指向的位置,并将dst向后移动一个位置。最后,将dst指向的位置设置为空字符,以表示字符串的结束。

main函数中,我们首先读入一个字符串和一个要删除的字符。然后,我们调用delete_char函数来删除指定的字符,并打印结果。

请注意,我们使用fgets函数来读取输入字符串,以避免缓冲区溢出问题。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢