C语言指针函数替换字符
发布网友
发布时间:2022-05-24 12:07
我来回答
共5个回答
热心网友
时间:2023-10-12 18:50
char
*replace(char
*source,
char
*sub,
char
*rep)
{
char
*result;
/*pc1
是复制到结果result扫描指针*/
/*pc2
是扫描
source
辅助指针*/
/*pc3
寻找子串时,为检查变化中source是否和子串相等,是指向sub扫描指针
*/
/*找到匹配后,为了复制到结果串,是指向rep扫描指针*/
char
*pc1,
*pc2,
*pc3;
int
isource,
isub,
irep;
isub
=
strlen(sub);
/*对比串长度*/
irep
=
strlen(rep);
/*替换串长度*/
isource=
strlen(source);
/*源串长度*/
if(NULL==*sub)
return
strp(source);
/*申请结果串需要空间*/
result
=
(char
*)malloc(((irep>isub)?(float)strlen(source)/isub*irep+1:isource)*sizeof(char));
pc1
=
result;
/*为pc1依次复制结果串每个字节作准备*/
while(*source
!=
NULL)
{
/*为检查source和sub是否相等作准备,为pc2,pc3
赋初值*/
pc2
=
source;
pc3
=
sub;
/*
出循环(任)条件是:
*
*pc2
不等于
*pc3
(和子串不相等)
*
pc2
到源串结尾
*
pc3
到源串结尾
(此时,检查了全部子串,source处和sub相等)
*****************************************************/
while(*pc2==*pc3
&&
*pc3
!=
NULL
&&
*pc2
!=
NULL)
pc2++,
pc3;
/*
如果找到了子串,进行以下处理工作*/
if(NULL==*pc3)
{
pc3
=
rep;
/*将替代串追加到结果串*/
while(*pc3
!=
NULL)
*pc1
=
*pc3;
pc2--;
source
=
pc2;
/*
检查
source和sub相等循环结束后
*
pc2
对应位置是在
sub
中串结束符处该是源串中下个位置
*
将
source
指向其前面个
***************************************************/
}
/*如果没找到子串,下面复制source所指字节到结果串*/
*pc1
=
*source;
source;
/*
将source向后移个*/
}
*pc1
=
NULL;
result;
}
热心网友
时间:2023-10-12 18:50
下面的程序可以把句子中所有的an都换成a。
#include<stdio.h>
main()
{
char a[]="I am an boy",*p1,*p2;
p1=a;
for(;*p1!='\0';p1++) //必须要设置条件,遇到字符串结束符就停止循环
{
if(*p1==' ' && *(p1+1)=='a' && *(p1+2)=='n' && (*(p1+3)==' ' || *(p1+3)=='\0')) //an一般不会出现在句首,因为句首字母要大写,所以此处只考虑单独的单词an。当然an也有可能出现在句末。
{//下面几句是把an换成a,实际上是把an后面的字符前移一位,覆盖掉n
p2=p1+2;;
while(*p2)
{
*p2=*(p2+1);
p2++;
}
}
}
printf("%s\n",a); //输出字符串要用%s
}追问while(*p2)
什么意思?
追答就是while(*p2!='\0'),即当p2没有指向字符串结束符时
热心网友
时间:2023-10-12 18:51
#include <stdio.h>
#include <string.h>
char * replace(char *str, char *str1, char *str2, char *strretu)
{
char *str_temp = str;
char *str1_temp = str1;
char *str2_temp = str2;
char *strretu_temp = NULL;
unsigned long char_size = (unsigned long)sizeof(char);
/*计算字符长度*/
unsigned long i,j,rep_acc = 0;
unsigned long str_len = strlen(str);
unsigned long str1_len = strlen(str1);
unsigned long str2_len = strlen(str2);
/*首先找出Str里有几个地方要被替换的*/
for(; str_temp - str < str_len; )
{
for(i = 0; i < str1_len; i++)
{
if(*str_temp++ != *str1_temp++)
{
str1_temp = str1;
break;
}
else
{
if(i == str1_len - 1)
{
str1_temp = str1;
rep_acc++;
}
}
}
}
str1_temp = str1;
str_temp = str;
/*分配所需内存*/
strretu = strretu_temp = malloc(((str_len - str1_len * rep_acc) + str2_len * rep_acc + 1) * char_size);
/*替换*/
for(; str_temp - str < str_len; )
{
for(i = 0; i < str1_len; i++)
{
*strretu_temp++ = *str_temp;
if(*str_temp++ != *str1_temp++)
{
str1_temp = str1;
break;
}
else
{
if(i == str1_len - 1)
{
strretu_temp = strretu_temp - str1_len;
for(i = 0; i < str2_len; i++)
{
*strretu_temp++ = *str2_temp++;
}
str2_temp = str2;
str1_temp = str1;
}
}
}
}
*strretu_temp = '\0';
str1_temp = str1;
str_temp = str;
str2_temp = str2;
return(strretu);
}
int main(void)
{
char *str = "I intinINTterrificinuIntstudentninth";
char *str1 = “int";
char *str2 ="FLOAT";
char *strretu = NULL;
printf("str = %s\n", str);
printf("str1 = %s\n", str1);
printf("str2 = %s\n", str2);
strretu = replace(str, str1, str2, strretu);
printf("strretu = %s\n", strretu);
getch();
free(strretu);
return 0;
}
热心网友
时间:2023-10-12 18:51
#include<stdio.h>
int main()
{
char a[]="i am an boy";
char* b=NULL;
char* c=NULL;
b=a;
while(*b != '\0')
{
while(*b == ' ')
b++;
if(*b =='a')
{
if(*(b+1)=='n')
{
if(*(b+2)==' ')
{
c=b+1;
while( *c != '\0')
{
*c=*(c+1);
++c;
}
}
}
}
while(*b != ' '&& *b!='\0')
++b;
}
printf("%s\n",a);
}
觉得对你有帮助请采纳 谢谢
热心网友
时间:2023-10-12 18:52
字符串替换,需要两层循环判断