主题:串赋值
zjkzxy
[专家分:310] 发布于 2006-04-17 15:25:00
#include <stdio.h>
#include <malloc.h>
#define OK 1
#define ERROR 0
typedef int Status;
#define NULL 0
typedef struct
{char *ch;//若是非空串,则按串长分配存储区,否则 ch 为NULL
int length;
}HString;
//-----------------------基本操作----------------------------------
Status StrAssign(HString &T,char *chars)
{//生成一个其值等于串常量chars的串T
int i,j;
if(T.ch) free(T.ch);
for(i=0;chars[i];i++);//求chars的长度i
if(!i){T.ch=NULL;T.length=0;}
else
{T.ch=(char*)malloc(i*sizeof(char));
if(!T.ch) return ERROR;
for(j=0;j<=i-1;j++) T.ch[j]=chars[j];
T.ch[j]='\0';
T.length=i;}
return OK;
}//StrAssign
main()
{HString T,s1,s2;
int i,pos,len;
char c[100];
printf("请输入一个字符串:");
scanf("%s",c);
StrAssign(T,c);
printf("\n请输出该字符串:");
for(i=0;i<T.length;i++)
printf("%c",T.ch[i]);
}
程序调试不出来,请高手指点一下
回复列表 (共7个回复)
沙发
rickone [专家分:15390] 发布于 2006-04-17 22:47:00
Status StrAssign(HString &T,char *chars)
{//生成一个其值等于串常量chars的串T
int i,j;
if(T.ch) free(T.ch);
for(i=0;chars[i];i++);//求chars的长度i
if(!i){T.ch=NULL;T.length=0;}
else
{T.ch=(char*)malloc((i+1)*sizeof(char));//你要留一个出来放末尾的'\0'
if(!T.ch) return ERROR;
for(j=0;j<=i-1;j++) T.ch[j]=chars[j];
T.ch[j]='\0';
T.length=i;}
return OK;
}//StrAssign
板凳
jay0518 [专家分:3150] 发布于 2006-04-18 13:36:00
程序调试不出来,还有一个主要的原因是:你在c程序中应用了c++的东西
Status StrAssign(HString &T,char *chars)//“&”是c++中的引用类型,在c中要用指针来代替
3 楼
zjkzxy [专家分:310] 发布于 2006-04-19 09:31:00
按照大家的说的做了相应的修改,编译通过了,但在调用StringAssign()时仍出错!郁闷啊
4 楼
lt19870917 [专家分:750] 发布于 2006-04-19 20:47:00
没有初始化
5 楼
lt19870917 [专家分:750] 发布于 2006-04-19 20:48:00
#include "string.h"
#include "stdlib.h"
#include "stdio.h"
#define ok 1
#define error 0
typedef struct
{
char *ch;//不以'/0'作为结束
int length;
}HString;
//初始化串(定义变量时必须初始化)
void ini_str(HString &s)
{
s.ch=NULL;
s.length=0;
}
//生成一个其值等于串常量chars的串T
bool str_assign(HString &T,char *chars)//
{
int count=0;
if(T.ch)
free(T.ch);
while(chars[count]!=NULL)
count++;//count是字符串的字符数
if(!(T.ch=(char *)malloc(sizeof(char)*count)))
exit(1);
for(int i=0;i<count;i++)
T.ch[i]=chars[i];
T.length=count;
return(ok);
}
//返回串的长度
int str_length(HString T)
{
return(T.length);
}
//若s>t,则返回值>0.s=t,则返回值=0.s<t,则返回值<0.
int str_compare(HString s,HString t)
{
int i=0;
while(i<s.length&&i<t.length)
{
if(s.ch[i]>t.ch[i])
{
return(1);
break;
}
else if(s.ch[i]<t.ch[i])
{
return(-1);
break;
}
else
i++;
}
if(s.length>t.length)
return(1);
else if(s.length<t.length)
return(-1);
else
return(0);
}
//将s清为空串,并释放s所占空间
bool str_clear(HString &s)
{
free(s.ch);
s.ch=NULL;//别忘了
s.length=0;
return(ok);
}
//用t返回由s1,s2联结而成的新串
bool str_cat(HString s1,HString s2,HString &t)
{
t.length=s1.length+s2.length;
if(!(t.ch=(char *)malloc(sizeof(char)*t.length)))
exit(1);
for(int i=0;i<s1.length;i++)
t.ch[i]=s1.ch[i];
for(int j=0;j<s2.length;j++)
t.ch[s1.length+j]=s2.ch[j];
return(ok);
}
//返回串s的第pos个字符起长度为len的子串(包括第pos个字符)
bool sub_str(HString s,int pos,int len,HString &sub)
{
if(pos<1||pos+len-1>s.length)
return(error);
sub.length=len;
if(!(sub.ch=(char *)malloc(sizeof(char)*len)))
exit(1);
for(int i=0;i<len;i++)
sub.ch[i]=s.ch[pos-1+i];
return(ok);
}
6 楼
lt19870917 [专家分:750] 发布于 2006-04-19 20:49:00
因为HString 有一个指针项,所以在调用是要进行初始化
7 楼
flysun0311 [专家分:2040] 发布于 2006-04-19 23:17:00
#include <stdio.h>
#include <malloc.h>
#define OK 1
#define ERROR 0
typedef int Status;
#define NULL 0
typedef struct
{char *ch;//若是非空串,则按串长分配存储区,否则 ch 为NULL
int length;
}HString;
//-----------------------基本操作----------------------------------
Status StrAssign(HString *T,char *chars)
{//生成一个其值等于串常量chars的串T
int i,j;
if(T->ch) free(T->ch);
for(i=0;chars[i]!='#';i++);//求chars的长度i
if(i==0){T->ch=NULL;T->length=0;}
else
{T->ch=(char*)malloc(i*sizeof(char));
for(j=0;j<=i-1;j++) T->ch[j]=chars[j];
T->ch[j]='\0';
T->length=i;
}
return OK;
}//StrAssign
void main()
{HString T,s1,s2;
int i,pos,len;
char c[100];
printf("请输入一个字符串:");
scanf("%c",&c[0]);
StrAssign(&T,c);
printf("\n请输出该字符串:");
for(i=0;i<T.length;i++)
printf("%c",T.ch[i]);
}
有很多地方用错拉.
你的编程风格有待遇改进!
我来回复