关于字符串的几个问题

来源:百度知道 编辑:UC知道 时间:2024/05/17 04:27:35
已知在文件IN.DAT中存有100个产品销售记录,每个产品销售
记录由产品代码dm(字符型4位),产品名称mc(字符型10位),单价
(整型),数量sl(整型),金额je(长整型)五部分组成。 其
中:金额=单价*数量计算得出。函数ReadDat() 读取这100个销售
记录并存入结构数组sell中。请编制函数SortDat(),其功能要
求:按产品代码从大到小进行排列,若产品代码相同, 则按金
额从大到小进行排列,最终排列结果仍存入结构数组sell 中,
最后调用函数WriteDat()把结果输出到文件OUT10.DAT中。

#include <mem.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>
#define MAX 100
typedef struct
{
char dm[5]; /*产品代码*/
char mc[11]; /*产品名称*/
int dj; /*单价*/
int sl; /*数量*/
long je; /*金额*/
}PRO;
PRO sell[MAX];
void ReadDat();
void WriteDat();
void SortDat()
{
int i,j;
PRO cell;
for (i=0;i<99;i++)
for (j=i+1;j<100;j++)
if (strcmp(sell(i).dm,sell(j).dm)<0)
{
cell=sell[i];
sell[i]=sell[j];
sell[j]=cell;
}
else if...(省略)

在上面这段程序中,if (strcmp(sell(i).dm,sell(

1.if (strcmp(sell(i).dm,sell(j).dm)<0)
打错了是if (strcmp(sell[i].dm,sell[j].dm)<0)

2.strcmp()函数是这样比较字符串的大小的:
如:
strcmp("a5b7","C24b");
a5b7和C24b,首先比较第一个字符的大小(安装ASCII值来比较),这里C是67,而a是97,所以a>C,因此C24b>a5b7的,strcmp就会返回一个大于0的值
若第一个字符相等,那么就继续判断下一个字符,直到判断结束
判断大小与字符串长度无关

b>abc的;
2.
还有一个就是strcmp是比较字符串时用的,那么我怎么判断sell(i).dm是字符串?是不是因为我当时定义的时候是char dm[]是字符型数组,如果是char c ,或者int b的化就不是字符串?

是,char c,c是字符,但可以作为参数,int b,b不是字符,但也可以作为参数(通过类型转换)

sell(i).dm是5为产品代码字符数组的首地址,以参数传到strcmp中可以把这5为看成字符串了.
strcmp的返回值是这样的,如果2个字符串相同,则返回0;如果不同则返回第一个不同字符的差值,差多少不重要,重要的是正负,那么就知道哪个字符串"大",哪个"小";