求解一个关于指针的问题,请各位大侠不吝赐教!
[color=#00FF00][color=#00FF00]
今天本人写了一个字符串处理函数,从原字符串中找到某些符合要求的子字符串 然后有个特定的字符串替换该子字符串。所有的功能模块运行良好 但是 在 void replace(int& i,int& len,int& len1,int& len2);这个函数中 遇到了一个问题 始终没解决,就是replace函数处理字符串之前传递进去的字符串居然输出是乱码 不知道是怎么回事 我在程序相应的地方已经标注 求大侠指教!
我输入的是:strSrc = abcabc strFind = a strReplace = bh
#include <stdio.h>
#include <stdlib.h>
//函数声明
void menu(void);
void StrReplace(void);
void get_len(int& len,int& len1,int& len2);
void replace(int& i,int& len,int& len1,int& len2);
char* strSrc;//三个待处理的字符串
char* strFind;
char* strReplace;
//主函数
int main(void)
{
//先申请空间
strSrc = (char*)malloc(sizeof(char));
strFind = (char*)malloc(sizeof(char));
strReplace = (char*)malloc(sizeof(char));
//输入函数
menu();
//替换函数
StrReplace();
return 0;
}
void menu(void)
{
printf("请输入原字符串:");//在标准输入流中的表现空格和字符串的结尾相同
scanf("%s",strSrc);
printf("您输入的字符串是:%s\n",strSrc);
printf("请输入查找子字符串:");
scanf("%s",strFind);
printf("您输入的字符串是:%s\n",strFind);
printf("请输入替换字符串:");
scanf("%s",strReplace);
printf("您输入的字符串是:%s\n",strReplace);
}
void StrReplace(void)
{
//三个字符串的长度
int len=0;
int len1=0;
int len2=0;
int count=0;//计数
int count1=0;
//得到长度
get_len(len,len1,len2);
printf("三个长度:%d %d %d\n",len,len1,len2);
//先判断长度
if(len<len1)
{
printf("数据错误!\n");
return;
}
if(len1==len2)
{
for(int m=0;m<len1;m++)
{
if(*(strFind+m) != *(strReplace+m))
break;
else count++;
}
if(count == len1)
{
printf("输入的字串相同\n");
return;
}
}
count=0;
//寻找符合要求的字串
for(int i=0;i<len;i++)
{
if(*strFind == *(strSrc+i))//向后遍历比较
{
if((i+len1)>len)
break;
for(int j=i;j<i+len1;j++)
{
if(*(strSrc+j) != *(strFind + j - i))
break;
else count++;
}
if(count == len1)//找到了字串
{
printf("%s\n",strSrc);[color=#FF9900][color=#000080]//这里我先输出了要被replace处理的strSrc 一切正常[/color]
replace(i,len,len1,len2);
count=0;
i--;
}
else
count=0;//重新计数
}
}
}
void get_len(int& len,int& len1,int& len2)
{
while(*(strSrc+len) != '\0')
len++;
while(*(strFind+len1) != '\0')
len1++;
while(*(strReplace+len2) != '\0')
len2++;
return;
}
void replace(int& i,int& len,int& len1,int& len2)
{
char str[1000];
int count1=0;
printf("%s\n",strSrc);//在每次的处理之前 我会先输出strSrc 但是第二次或是第二次之后调用的时候这里是乱码 不知道为什么
//替换的时候还可能会产生不同长度的替换
if(len1==len2)//长度相等
{
for(int k=i;k<i+len1;k++)
*(strSrc + k) = *(strReplace+k-i);
printf("尝试输出:\n");
for(int b=0;b<len;b++)
printf("%c",strSrc[b]);
printf("\n");
}
else//长度不相等且替换的长这里由于长度的限制可能会出错
{
for(int j=0;j<i;j++)
*(str+j) = *(strSrc+j);
for(j;j <i+len2;j++)
*(str+j) = *(strReplace+j-i);
for(j;j<len-len1+len2;j++)
{
*(str+j) = *(strSrc+i+len1+count1);
count1++;
}
strSrc = str;
//长度改变了
len = len-len1+len2;
*(strSrc+len)='\0';
printf("%s\n",strSrc);
}
}
[/color][/color][/color]
C语言 指针 问题
[解决办法]
仅供参考
#include <stdio.h>
#include <string.h>
#include <locale.h>
char s[256];
char *p;
int r,n,i;
int main() {
setlocale(LC_ALL,"chs");
while (1) {
printf("请输入一行文字(空行结束),"%%20"将替换为" ","你懂得"将替换为"XXXXXX":\n");
fgets(s,256,stdin);
if ('\n'==s[0]) break;
p=s;
while (1) {
p=strstr(p,"%20");
if (p) {
memmove(p+1,p+3,strlen(p)-3+1);
p[0]=' ';
} else break;
}
p=s;
while (1) {
p=strstr(p,"你懂得");
if (p) {
memmove(p+6,p+6,strlen(p)-6+1);
for (i=0;i<6;i++) p[i]='X';
} else break;
}
printf("%s",s);
}
return 0;
}
//请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX":
//abcdefg%20helloworld%20something.pdf
//abcdefg helloworld something.pdf
//请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX":
//这是测试文字你懂得,在这个你懂的地方,就得做你懂得的事
//这是测试文字XXXXX,在这个你懂的地方,就得做XXXXX的事
//请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX":
//