200分球一个c语言关于字符串的程序 ( 积分: 200 )

  • 主题发起人 主题发起人 Cole
  • 开始时间 开始时间
C

Cole

Unregistered / Unconfirmed
GUEST, unregistred user!
200分球一个c语言关于字符串的函数
要求:
1,给定一个源字符串:*pcSource,一个左字符串:*pcLeft,一个右字符串:*pcRight
2,求在源字符串中,左右两个字符串中间的部分
如:
源字符串 abcdefgABCDEFG

左字符串 右字符串 返回值 输出
bc fg vos_true de
BC FG vos_true DE
bc FG vos_true defgABCDE
空 fg vos_true abcde
bc 空 vos_true defgABCDEFG
abc bcd vos_false 空
ab hi vos_false 空
hk FG vos_false 空

输出形式:输出结果到一个TXT文件中。
 
先分別求出左右字符串中最大字符的ASCII值,然後相減,作爲循環條件,左字符串中最大ASCII值加上循環值可以求出相應的ASCII值,再轉換成字符就可以得出輸出的結果啊。
 
先strstr分别找到两个串的位置
然后第1个串指针自加第1个串的长度值
再用第2个串批针减去第1个串的指针=中间部分的长度
strncpy就取了串了
 
用post定位
第一串的位置加第一串的长度与第二串的位置之间的差值,在取第一串末尾的位置,拷贝出来就可以了
 
刚才又重新温习了一下C,觉得现在来写C真痛苦啊,不过还是勉强写完了,测试通过。
void main()
{
char ch;
int i,j,m,n;
int t,v;
char *pcSource = "abcdefgABCDEFG";
char *pcLeft = "c";
char *pcRight = "";
char s[20];


m = findLeft(pcSource,pcLeft);

n = findRight(pcSource,pcRight);

for(i=m,j=0;i<=n;i++,j++)
{

s[j] = *(pcSource+i);
}
s[j] = 0;
printf(&quot;%s/n&quot;,s);

}
int findLeft(const char *S,const char *sub)
{
int i,j;
int t,v,m;
int findit;

t = strlen(S);
v = strlen(sub);
for(i = 0;i<t;i++)
{
findit = 0;
m = i;
for(j = 0;j < v;j++)
{
if (*(sub+j) != *(S+i))
{
findit = -1;
break;

}
i++;
}
if (findit ==0)
{
findit = 1;
break;
}
else
{
i = m;
}
};

return(i);

};
int findRight(const char *S,const char *sub)
{
int i,j;
int t,v,m;
int findit;
t = strlen(S);
v = strlen(sub);
for(i = t-1;i>=0;i--)
{
findit = 0;
m = i;
for(j = v-1;j >=0;j--)
{
if (*(sub+j) != *(S+i))
{
findit = -1;
break;

}
i--;
}
if (findit ==0)
{
findit = 1;
break;
}
else
{
i = m;
};
}
return(i);
};
 
正在测试中,感谢“创意人生“,即使这个程序最后不符合要求,我也会为你送上100分以示感谢
 
“创意人生“的程序不符合要求阿,要求是pcLeft等参数可以为多个字符,并且可以由用户自己设定,不是指定阿。
 
设成变量不就可以了
 
Cole:
我在这里把你需要的功能都完成了,你可以测试一下,因为我不知道你希望如何输入参数,所以只在main函数里输入一个固定的值,你可以很容易改装成泥需要的函数。我现在不方便切换到VC那边,你要是需要的话,我帮你改造一下。
 
多人接受答案了。
 
后退
顶部