C语言如何实现删除字符串中的字符

比如我的字符串是abcde****abcd***,我要得到abcdabcd

C语言删除字符串中指定字符可以参考下面的代码:

#include<stdio.h>

int main

{

char * fun(char * s);

char arg[] = "hello.cgi?name1=value1&name2=value2";

printf("This value :%s\n",fun(arg));

getchar();

return 0;

}

char * fun(char * s)

{

char *s1 = s; //s1指向字符串首地址

while ((*s != '?') && (*s != 0)) //字符不为结束符或者不为?,指向下一个字符

s++;

*s = 0; //将这个字符置为结束符

return s1;

};

扩展资料:

C语言isupper()函数:判断一个字符是否是大写字母

C语言isspace()函数:判断一个字符是否是空白符

C语言isprint()函数:判断一个字符是否是可打印字符

C语言islower()函数:判断一个字符是否是小写字母

C语言ldexp()函数:返回x乘以2的exponent次方(次幂)的值

C语言ldiv()函数:求两个数的商和余数(针对long类型)

C语言ceil()函数:求不小于x的最小整数(向上取整)

C语言floor()函数:求不大于x的最大整数(向下取整)

double atof(char *nptr) 将字符串nptr转换成浮点数并返回这个浮点数

double atoi(char *nptr) 将字符串nptr转换成整数并返回这个整数

参考资料来源:百度百科-C语言函数

参考资料来源:百度百科-c语言

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-08
字符串其实是一个数组。你把后面的abcd依次移到****位置上。然后让字符串结束就好了。
符串或串(String)是由零个或多个字符组成的有限序列。一般记为 s='a1a2???an'(n>=0)。它是编程语言中表示文本的数据类型。
通常以串的整体作为操作对象,如:在串中查找某个子串、求取一个子串、在串的某个位置上插入一个子串以及删除一个子串等。两个字符串相等的充要条件是:长度相等,并且各个对应位置上的字符都相等。设p、q是两个串,求q在p中首次出现的位置的运算叫做模式匹配。串的两种最基本的存储方式是顺序存储方式和链接存储方式。
[编辑本段]字符串函数

1. 连接运算 concat(s1,s2,s3…sn) 相当于s1+s2+s3+…+sn.
例:concat(‘11’,'aa’)='11aa’;
2. 求子串。 Copy(s,I,L) 从字符串s中截取第I个字符开始后的长度为l的子串。
例:copy(‘abdag’,2,3)=’bda’
3. 删除子串。过程 Delete(s,I,l) 从字符串s中删除第I个字符开始后的长度为l的子串。
例:s:=’abcde’;delete(s,2,3);结果s:=’ae’
4. 插入子串。 过程Insert(s1,s2,I) 把s1插入到s2的第I个位置
例:s:=abc;insert(‘12’,s,2);结果s:=’a12bc’
5. 求字符串长度 length(s) 例:length(‘12abc’)=5
在ASP中 求字符串长度用 len(s)例: len("abc12")=5
6. 搜索子串的位置 pos(s1,s2) 如果s1是s2的子串 ,则返回s1的第一个字符在s2中的位置,若不是子串,则返回0.
例:pos(‘ab’,’12abcd’)=3
7. 字符的大写转换。Upcase(ch) 求字符ch的大写体。
例:upcase(‘a’)=’A’
8. 数值转换为数串。 过程 Str(x,s) 把数值x化为数串s.
例:str(12345,s); 结果s=’12345’
9. 数串转换为数值。 过程val(s,x,I) 把数串s转化为数值x,如果成功则I=0,不成功则I为无效字符的序数
例:val(‘1234’,x,I);结果 x:=1234本回答被提问者采纳
第2个回答  推荐于2017-09-23

利用指针对字符串进行字符串数据重新组织,可以很方便的完成删除指针字符。参考代码如下:

#include <stdio.h>
void del_chr( char *s, char ch )
{
    char *t=s; //目标指针先指向原串头
    while( *s != '\0' ) //遍历字符串s
    {
        if ( *s != ch ) //如果当前字符不是要删除的,则保存到目标串中
            *t++=*s;
        s++ ; //检查下一个字符
    }
    *t='\0'; //置目标串结束符。
}
void main()
{
    char str[]="***abcde***fghi***" ;
    del_chr(str, '*' );
    printf("str=【%s】\n", str );
}

第3个回答  2019-11-06
利用指针对字符串进行字符串数据重新组织,可以很方便的完成删除指针字符。参考代码如下:
#include <stdio.h>
void del_chr( char *s, char ch )
{
char *t=s; //目标指针先指向原串头
while( *s != '\0' ) //遍历字符串s
{
if ( *s != ch ) //如果当前字符不是要删除的,则保存到目标串中
*t++=*s;
s++ ; //检查下一个字符
}
*t='\0'; //置目标串结束符。
}
void main()
{
char str[]="***abcde***fghi***" ;
del_chr(str, '*' );
printf("str=【%s】\n", str );
}
第4个回答  2020-04-03
在你的delchar()函数里面,进行覆盖那里应该改成
*p
=
*(p+1)
如果是*p
=
*p
+
1结果是
先取出
p指向的内存中的字符,然后该字符加1之后再赋值给p所指向的内存。
列入
*p
=
a;
那*p
=
*p
+1
结果是
*p
=
b;
而*p
=
*(p
+
1)
是p指针先指向p前面的一个内存单元,再用*取出该内存单元的值,然后赋值给
p
所指向的内存单元
*p
相似回答