用指针(不用函数)写一个程序实现: 删除字符串中的所有某一个字符
将不是这个字符的字符都从字符串开头存放
#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;
}
举个例子,在诊所里,有许多的柜子,里面装着不同的药,小时候经常觉得医生拿药是件很神奇的事。
其实啊,指针也像这么一个个的柜子,只不过里面装着的是每个药的存放地址,而这个地址就是指针,这个指针也就指向了这个特别的药。
我能解决该问题。
代码如下:
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
的函数,它接受一个指向字符数组的指针和一个要删除的字符。该函数使用两个指针src
和dst
,分别指向字符串中当前字符和最终字符串中的字符。当src
指向一个不需要删除的字符时,将其复制到dst
指向的位置,并将dst
向后移动一个位置。最后,将dst
指向的位置设置为空字符,以表示字符串的结束。
在main
函数中,我们首先读入一个字符串和一个要删除的字符。然后,我们调用delete_char
函数来删除指定的字符,并打印结果。
请注意,我们使用fgets
函数来读取输入字符串,以避免缓冲区溢出问题。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢