关于串操作的一些疑惑
#include<stdio.h>
#include<stdlib.h>
#define MAXSTRLEN 255
typedef unsigned char sstring[MAXSTRLEN+1]
struct sstring
{
char *ch;
int length;
}
strassign(struct sstring *T,char *chars)
{
int nlenth;
nlenth=strlen(chars);
T->length=nlenth;
T->ch=(char *)malloc(nlenth*sizeof(char)+1);
if(!T->ch)
{
T->length=0;
exit(overflow);
}
else
{
strcpy(T->ch,chars);
return 0;
}
}//strassign
int strlength(struct sstring *S)
{
S->length=strlen(S);
return S->ch;
}//strlength
int strcompare(struct sstring *S,struct sstring *T)
{
if (S>MAXSTRLEN && T>MAXSTRLEN exit(overflow));
if (strcmp(S->ch,T->ch)==0) return 0;
else if(strcmp(S->ch,T->ch)>0) return 1;
else return -1;
}//strcompare
int clearstring(struct sstring *S)
{
if (S->ch){
free (S->ch);
S->ch=NULL;
S->length=0;
}
return 0;
}//clearstring
int concat(struct sstring *T,struct sstring *s1,struct sstring *s2)
{
if(s1[0]+s2[0]<=MAXSTRLEN)
{
strcpy(T->ch,s1->ch);
strcpy(T->ch,s2->ch);
T[0]=S1[0]+S2[0];
uncat=TRUE;
}
else if (s1[0]<MAXSTRLEN)
{
strcpy(T->ch,s1->ch);
strcpy(T->ch,s2->ch);
T[0]=MAXSTRLEN;
uncat=FALSE;
}
else{
T->ch=s1->length
uncat=FALSE;
}
return uncat;
}//concat
int substring(struct sstring *sub,struct sstring *S,int pos,int len)
{
char *p;int i;
if(pos<1 || pos>S[0] || len<0 || len>S[0]-pos+1)
return -1;
else{
sub->ch=(char*) malloc(len *sizeof(char)+1);
p=S->ch;
for(i=0;i<=pos-1;i++)
p++;
}
strcpy(sub->ch,p);
return 0;
}//substring
main( )
{
char inp;
char *T[255];
char *S[255];
struct sstring *s1,*s2,*res;
int pos,len;
printf("1-------strassing\n");
printf("2-------strlength\n");
printf("3-------strcompare\n");
printf("4-------clearstring\n");
printf("5-------concat\n");
printf("6-------substring\n");
printf("*-------exit!");
printf("please in put1--6 or *\n\n")
while(1){
scanf("%c",&inp);
switch(inp){
case 1:{
scanf("%s",&S);
res->ch=strassign(s1,S);
if(res->ch==0)
printf("the string is:%s",s1->ch);
else
printf("error"); }
case 2: {
scanf("%s",&S);
s1->length=strlen(S);
strcpy(s1->ch,S);
res->ch=strlength(S);
printf("the string is:%d\n",s1->length);}
case 3:{
scanf("%s",&S);
scanf("%s",&T);
s1->length=strlen(S);
strcpy(s1->ch,S);
s2->length=strlen(T);
strcpy(s2->ch,T);
res->ch=strcompare(S,T);
switch(res){
case 0:
printf("two strings are equle");
case 1:
printf("the first string > the second string");
case -1:
printf("the first string < the second string");}
}
case 4:{
res->ch=clearstring(s1);
res->ch=clearstring(s2);
printf("the string is NULL");}
case 5:{
scanf("%s",&S);
scanf("%s",&T);
strcat(&s1,S,T);
if(res==0)
printf("the string is:%s",s1->ch);
}
case 6: {
scanf("%s_%d_%d",S,&pos,&len);
s2->length=strlen(S);
strcpy(s2->ch,S);
res->ch=substring(s1,s2,pos,len);
if(res==0)
printf("the string is:%s",s1->ch);
else printf("error");}
case *:
exit;
}
}
}
各位高手们给小弟我看看,到底哪里错了,我编译运行时出现说明语法错误. 不甚感激!
[解决办法]
struct sstring { char *ch; int length; };
[解决办法]
你的代码错误太多了.都不知道怎么说你了,要改的地方不低于10处,全是语法错误/包括没有包含最基本的字符串函数所需的头文件string.h
[解决办法]
先把typedef unsigned char sstring[MAXSTRLEN+1] 注释掉.在慢慢编译,问题就很清楚了
[解决办法]
int strlength(struct sstring *S) { S->length=(int)strlen(S); return S->ch; //ch是char*,能够返回int? }//strlength 错误好多啊,我这边编译了一下有40多个
[解决办法]
错误太多了
53个(xp+vs 6.0)下
重新写吧
[解决办法]
免费送手机卡
特大好消息,真正免费的手机充值卡密码大赠送活动来啦,从此你再也不用为手机话费发愁了!详情请浏览
http://www.589108.com/zr?id=24039 相信你不费吹灰之力,便可领取到由该公司提供的面值30元,50元,100元的充值卡密码。同时为了扩大市场,刺激消费,提升企业影响力,该公司特推出“充值卡特价促销”优惠月活动,低廉的价格让你不心动都难哦(财富就在你眼前,需要的请赶紧把握)