为什么当我按A,再输入母串jajjajajjaja,查找子串ja,为什么不显示jja中ja的位置
#include
#include
void main()
{
char choose;
char strSource,strLin,strFind,strReplace;
void find(char strSource,char strLin);
void exchange(char strSource,char strFind,char strReplace);//声明一个函数,用来实现字符串的替换
printf(" 请选择A或B:");
scanf("%c",&choose);
switch(choose)
{
case 'A':find(strSource,strLin);
break;
case 'B':exchange(strSource,strFind,strReplace);
break;
default:printf("错误选择!请重选");
break;
}
}
void find(char*strSource,char*strLin)
{
char a[6000],b[100];
int i,t=0,l1,l2,k,f;
printf("请输入母串:\n");
scanf("%s",a);
printf("请输入要查找的子字符串:\n");
scanf("%s",b);
l1=strlen(a);//计算strSoure的长度,并将值赋给l1
l2=strlen(b);//计算strLin的长度,并将值赋给l2
for(i=0;i {
k=0; //已经遍历的长度
f=1; //匹配的长度标志
while(f)
{
if(*(a+i+k)!=*(b+k)) //strSource从第i个开始,是否和strLin匹配
f=0; //不匹配标志位,跳出while循环,让i自增
else
f=f+1;
k++; //遍历长度自增
if(f==l2+1) //找到了和strLin一样的串
{
t++;
f=0;
printf(" 位置为:%d\n",i);
}
}
i+=k; //i跳过本次遍历的长度
}
if(t==0)
printf(" 母串中不存在该子串:-1\n");
}
void exchange(char*strSource,char*strFind,char*strReplace)
{
char a[6000],b[100],c[100];
int i,r,d,l1,l2,l3,k,f;
printf("请输入母串:\n");
scanf("%s",&a);
printf("请输入要替换的子字符串:\n");
scanf("%s",&b);
printf("新的子字符串为:\n");
scanf("%s",&c);
l1=strlen(a);
l2=strlen(b);
l3=strlen(c);
d=l3-l2;
for(i=0;i {
k=0;
f=1;
while(f)
{
if(*(a+i+k)!=*(b+k)) //strSource从第i个开始,是否和strFind匹配
f=0;
else
f=f+1;
k++;
if(f==l2+1) //找到了和strFind一样的串
{
if(d>0) //当l3大于l2,执行下列语句
for(r=0;r<=l1-i-l2;r++)
(a+d+l1-r)=(a+l1-r); //strSource往后扩展d的长度
if(d<0) //当l3小于l2,执行下列语句
for(r=0;r<l1-i-l2+1;r++)
(a+i+l2+d+r)=(a+i+l2+r); //strSource往前缩小d的长度
for(r=0;r<l3;r++)
(a+i+r)=(c+r); //将对应的位置替换成strReplace
l1=l1+d; //strSource长度重新计算
f=0; //跳出循环,让i自增
k=l3; //本次遍历的长度重新计算
}
}
i+=k; //i跳过本次遍历的长度
}
printf(" 替换后母串为:%s\n",a);
}
把程序进行单步调试,很容易发现问题出在哪里了
请在Debug一下,单步执行你的代码。
这个你单步调试一下看看变量的值到底是什么