我实在是找不出是哪错了,求帮忙
小弟我实在是找不出是哪错了,求帮忙
------解决思路----------------------
我刚才又看了一下,你的问题是
1.主函数中 a=StrCompare(T).
= 的意思是赋值。
==才是比较。
2.函数int StrAss有问题。
------解决思路----------------------
------解决思路----------------------
先不说别的,这句好像就有点问题吧
if(a=0) printf("一样大\n");
------解决思路----------------------
当程序调用getchar时,程序就等着用户按键,用户输入的字符被存放在键盘缓冲区中,直到用户按回车为止(回车字符也放在缓冲区中)。当用户键入回车之后,getchar才开始从stdio流中每次读入一个字符。
所以你的情况是,输入#后,还有一个换行符存在于键盘缓冲区中。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define OK 1
#define ERROR 0
typedef struct
{
char * ch;
int length;
}HStr;
void ViewStr(HStr A) //浏览当前字符串内容
{
for(int i=0;i<A.length;i++)
printf("%c",A.ch[i]);
printf("长度为:");
printf("%d\n",A.length);
printf("\n");
}
int StrAss(HStr & T) //新建
{
printf("请输入:");
char c;int i=0;
T.ch=(char *)malloc(sizeof(char));
for(i=0;(c=getchar())!='#';i++)
{
T.ch[i]=c;
}
T.length=i;
printf("输入的字符为:");
ViewStr(T);
return OK;
}
void StrLength(HStr A) //长度
{
if(A.ch)
printf("字符串长度为:%d\n",A.length);
else printf(" 错误\n");
}
int EmpStr(HStr A) //判断串是否为空
{
if(A.ch) return OK;
else return ERROR;
}
int StrCopy(HStr &T,HStr S) //两串复制
{
S.ch=(char *)malloc(T.length * sizeof(char));
if(!S.ch) return OVERFLOW;
for(int i=0;i<T.length;i++)
{
S.ch[i]=T.ch[i];
}
return OK;
}
int StrCompare(HStr T) //串比较
{
printf("新建需要比较的字符串\n");
HStr S;
StrAss(S);
for(int n=0;n<T.length&&n<S.length;n++)
if(S.ch[n]!=T.ch[n]) return S.ch[n]-T.ch[n];
return S.length-T.length;
}
void ClearStr(HStr &T) //清空串
{
if(T.ch) {free(T.ch); T.ch=NULL;}
}
int Concat(HStr T) //连接两个串
{
HStr S;HStr A;
printf("请输入要连接的字符串:");
StrAss(S);int i,n;
A.ch=(char *)malloc((T.length+S.length)*sizeof(char));
for(i=0,n=0;i<(T.length)||n<S.length;i++,n++)
{
A.ch[i]=T.ch[i];
A.ch[T.length+n]=S.ch[n];
}
A.length=T.length+S.length;
//for(int n=0;n<S.length;n++)
//{
// A.ch[T.length+n]=S.ch[n];
//}
printf("连接后的串是:\n");
ViewStr(A);
return OK;
}
int SubStr(HStr A) //取出从pos位开始len长度的子串
{
HStr Sub;
int pos;int len;
printf("请输入从第几位开始:");
scanf("%d",&pos);
printf("请输入取出的长度:");
scanf("%d",&len);
if(pos<1||pos>A.length||len<0||len>A.length-pos+1)
return ERROR;
// if(Sub.ch) free(Sub.ch);
if(!len){Sub.ch=NULL;Sub.length=0;}
else{
Sub.ch=(char *)malloc(len * sizeof(char));
for(int i=0;i<len;i++)
{
Sub.ch[i]=A.ch[pos+i-1];
}
Sub.length=len;
}
printf("取出的串为:");
ViewStr(Sub);
return OK;
}
//int Index()
void main()
{
HStr T;
printf("新建的字符串\n");
StrAss(T);
StrLength(T);
if(EmpStr(T)) printf("串不为空\n");
else printf("串为空\n");
int a=StrCompare(T);
if(a=0) printf("一样大\n");
else if(a<0) printf("原串大\n");
else printf("后串大\n");
Concat(T);
SubStr(T);
system("pause");
}
------解决思路----------------------
我刚才又看了一下,你的问题是
1.主函数中 a=StrCompare(T).
= 的意思是赋值。
==才是比较。
2.函数int StrAss有问题。
------解决思路----------------------
int StrAss(HStr & T) //新建
{
printf("请输入:");
char c;int i=0;
T.ch=(char *)malloc(sizeof(char)); //这里只分配了一个字节的空间
for(i=0;(c=getchar())!='#';i++)
{
T.ch[i]=c; //要是输入多个字节就会溢出
}
T.length=i;
printf("输入的字符为:");
ViewStr(T);
return OK;
}
------解决思路----------------------
先不说别的,这句好像就有点问题吧
if(a=0) printf("一样大\n");
------解决思路----------------------
当程序调用getchar时,程序就等着用户按键,用户输入的字符被存放在键盘缓冲区中,直到用户按回车为止(回车字符也放在缓冲区中)。当用户键入回车之后,getchar才开始从stdio流中每次读入一个字符。
所以你的情况是,输入#后,还有一个换行符存在于键盘缓冲区中。
for(i=0;(c=getchar())!='#';i++)
{
T.ch[i]=c;
}
// 消耗掉换行符
int ent = getchar();