poj 2998 总是WA,不知道错在哪里,求指教
#include<iostream>#include<cstdlib>#include<cstring>usingnamespacestd;structJob{chars...
#include<iostream>
#include<cstdlib>
#include<cstring>
using namespace std;
struct Job
{
char str[15];
char date[15];
char time[15];
char cost[15];
int space[5];//存储每一行空格的个数
}job[10001];
void range(Job* job, int n)
//采用选择排序
{
struct Job temp;
for(int i=0; i<n; i++)
for(int j=i+1; j<n; j++)
{
if(strcmp(job[i].cost, job[j].cost) > 0)
{
temp = job[i];
job[i] = job[j];
job[j] = temp;
}
else if(strcmp(job[i].cost, job[j].cost) == 0)
{
if(strcmp(job[i].date, job[j].date) > 0)
{
temp = job[i];
job[i] = job[j];
job[j] = temp;
}
else if(strcmp(job[i].date, job[j].date) == 0)
{
if(strcmp(job[i].time, job[j].time) > 0)
{
temp = job[i];
job[i] = job[j];
job[j] = temp;
}
}
}
}
}
int main()
{
int i=0;
char c;
char tempstr[100];
while(cin.get(c) && c!='\n')
{
cin.putback(c);
cin.getline(tempstr, 100, '\n');
memset(job[i].space, 0, sizeof(job[i].space));
int k=0;
//字符串处理过程
while(tempstr[k] == ' ')
{
job[i].space[0]++;
k++;
}
for(int t=0; tempstr[k]!=' '; t++, k++)
job[i].str[t] = tempstr[k];
while(tempstr[k] == ' ')
{
job[i].space[1]++;
k++;
}
for(int t=0; tempstr[k]!=' '; t++, k++)
job[i].date[t] = tempstr[k];
while(tempstr[k] == ' ')
{
job[i].space[2]++;
k++;
}
for(int t=0; tempstr[k]!=' '; t++, k++)
job[i].time[t] = tempstr[k];
while(tempstr[k] == ' ')
{
job[i].space[3]++;
k++;
}
for(int t=0; tempstr[k]!=' ' && tempstr[k]!='\0'; t++, k++)
job[i].cost[t] = tempstr[k];
while(tempstr[k] == ' ')
{
job[i].space[4]++;
k++;
}
i++;
}
range(job, i);
for(int j=0; j<i; j++)
{
for(int t=0; t<job[j].space[0]; t++)
cout << " ";
cout << job[j].str;
for(int t=0; t<job[j].space[1]; t++)
cout << " ";
cout << job[j].date;
for(int t=0; t<job[j].space[2]; t++)
cout << " ";
cout << job[j].time;
for(int t=0; t<job[j].space[3]; t++)
cout << " ";
cout << job[j].cost;
for(int t=0; t<job[j].space[4]; t++)
cout << " ";
cout << endl;
}
system("pause");
return 0;
} 展开
#include<cstdlib>
#include<cstring>
using namespace std;
struct Job
{
char str[15];
char date[15];
char time[15];
char cost[15];
int space[5];//存储每一行空格的个数
}job[10001];
void range(Job* job, int n)
//采用选择排序
{
struct Job temp;
for(int i=0; i<n; i++)
for(int j=i+1; j<n; j++)
{
if(strcmp(job[i].cost, job[j].cost) > 0)
{
temp = job[i];
job[i] = job[j];
job[j] = temp;
}
else if(strcmp(job[i].cost, job[j].cost) == 0)
{
if(strcmp(job[i].date, job[j].date) > 0)
{
temp = job[i];
job[i] = job[j];
job[j] = temp;
}
else if(strcmp(job[i].date, job[j].date) == 0)
{
if(strcmp(job[i].time, job[j].time) > 0)
{
temp = job[i];
job[i] = job[j];
job[j] = temp;
}
}
}
}
}
int main()
{
int i=0;
char c;
char tempstr[100];
while(cin.get(c) && c!='\n')
{
cin.putback(c);
cin.getline(tempstr, 100, '\n');
memset(job[i].space, 0, sizeof(job[i].space));
int k=0;
//字符串处理过程
while(tempstr[k] == ' ')
{
job[i].space[0]++;
k++;
}
for(int t=0; tempstr[k]!=' '; t++, k++)
job[i].str[t] = tempstr[k];
while(tempstr[k] == ' ')
{
job[i].space[1]++;
k++;
}
for(int t=0; tempstr[k]!=' '; t++, k++)
job[i].date[t] = tempstr[k];
while(tempstr[k] == ' ')
{
job[i].space[2]++;
k++;
}
for(int t=0; tempstr[k]!=' '; t++, k++)
job[i].time[t] = tempstr[k];
while(tempstr[k] == ' ')
{
job[i].space[3]++;
k++;
}
for(int t=0; tempstr[k]!=' ' && tempstr[k]!='\0'; t++, k++)
job[i].cost[t] = tempstr[k];
while(tempstr[k] == ' ')
{
job[i].space[4]++;
k++;
}
i++;
}
range(job, i);
for(int j=0; j<i; j++)
{
for(int t=0; t<job[j].space[0]; t++)
cout << " ";
cout << job[j].str;
for(int t=0; t<job[j].space[1]; t++)
cout << " ";
cout << job[j].date;
for(int t=0; t<job[j].space[2]; t++)
cout << " ";
cout << job[j].time;
for(int t=0; t<job[j].space[3]; t++)
cout << " ";
cout << job[j].cost;
for(int t=0; t<job[j].space[4]; t++)
cout << " ";
cout << endl;
}
system("pause");
return 0;
} 展开
展开全部
strcmp用来比较数字不合适
#include<iostream>
#include<iomanip>
#include<cstdlib>
#include<cstring>
using namespace std;
struct Job
{
char str[15];
char date[15];
char time[15];
double cost;
int space[5];//存储每一行空格的个数
}job[10001];
void range(Job* job, int n)
//采用选择排序
{
struct Job temp;
for(int i=0; i<n; i++)
for(int j=i+1; j<n; j++)
{
if(job[i].cost > job[j].cost)
{
temp = job[i];
job[i] = job[j];
job[j] = temp;
}
else if(job[i].cost > job[j].cost == 0)
{
if(strcmp(job[i].date, job[j].date) > 0)
{
temp = job[i];
job[i] = job[j];
job[j] = temp;
}
else if(strcmp(job[i].date, job[j].date) == 0)
{
if(strcmp(job[i].time, job[j].time) > 0)
{
temp = job[i];
job[i] = job[j];
job[j] = temp;
}
}
}
}
}
int main()
{
int i=0;
char c;
char tempstr[1000];
while(cin.get(c) && c!='\n')
{
cin.putback(c);
cin.getline(tempstr, 1000, '\n');
memset(job[i].space, 0, sizeof(job[i].space));
int k=0;
//字符串处理过程
while(tempstr[k] == ' ')
{
job[i].space[0]++;
k++;
}
for(int t=0; tempstr[k]!=' '; t++, k++)
job[i].str[t] = tempstr[k];
while(tempstr[k] == ' ')
{
job[i].space[1]++;
k++;
}
for(int t=0; tempstr[k]!=' '; t++, k++)
job[i].date[t] = tempstr[k];
while(tempstr[k] == ' ')
{
job[i].space[2]++;
k++;
}
for(int t=0; tempstr[k]!=' '; t++, k++)
job[i].time[t] = tempstr[k];
while(tempstr[k] == ' ')
{
job[i].space[3]++;
k++;
}
job[i].cost = atof(tempstr+k);
// 或者用 sscanf(tempstr+k,"%lf",&job[i].cost);
while(tempstr[k]!=' '&&tempstr[k]!='\0') k++;
while(tempstr[k] == ' ')
{
job[i].space[4]++;
k++;
}
i++;
}
range(job, i);
for(int j=0; j<i; j++)
{
for(int t=0; t<job[j].space[0]; t++)
cout << " ";
cout << job[j].str;
for(int t=0; t<job[j].space[1]; t++)
cout << " ";
cout << job[j].date;
for(int t=0; t<job[j].space[2]; t++)
cout << " ";
cout << job[j].time;
for(int t=0; t<job[j].space[3]; t++)
cout << " ";
cout << fixed << setprecision(3) << job[j].cost << "(s)";
for(int t=0; t<job[j].space[4]; t++)
cout << " ";
cout << endl;
}
system("pause");
return 0;
}
#include<iostream>
#include<iomanip>
#include<cstdlib>
#include<cstring>
using namespace std;
struct Job
{
char str[15];
char date[15];
char time[15];
double cost;
int space[5];//存储每一行空格的个数
}job[10001];
void range(Job* job, int n)
//采用选择排序
{
struct Job temp;
for(int i=0; i<n; i++)
for(int j=i+1; j<n; j++)
{
if(job[i].cost > job[j].cost)
{
temp = job[i];
job[i] = job[j];
job[j] = temp;
}
else if(job[i].cost > job[j].cost == 0)
{
if(strcmp(job[i].date, job[j].date) > 0)
{
temp = job[i];
job[i] = job[j];
job[j] = temp;
}
else if(strcmp(job[i].date, job[j].date) == 0)
{
if(strcmp(job[i].time, job[j].time) > 0)
{
temp = job[i];
job[i] = job[j];
job[j] = temp;
}
}
}
}
}
int main()
{
int i=0;
char c;
char tempstr[1000];
while(cin.get(c) && c!='\n')
{
cin.putback(c);
cin.getline(tempstr, 1000, '\n');
memset(job[i].space, 0, sizeof(job[i].space));
int k=0;
//字符串处理过程
while(tempstr[k] == ' ')
{
job[i].space[0]++;
k++;
}
for(int t=0; tempstr[k]!=' '; t++, k++)
job[i].str[t] = tempstr[k];
while(tempstr[k] == ' ')
{
job[i].space[1]++;
k++;
}
for(int t=0; tempstr[k]!=' '; t++, k++)
job[i].date[t] = tempstr[k];
while(tempstr[k] == ' ')
{
job[i].space[2]++;
k++;
}
for(int t=0; tempstr[k]!=' '; t++, k++)
job[i].time[t] = tempstr[k];
while(tempstr[k] == ' ')
{
job[i].space[3]++;
k++;
}
job[i].cost = atof(tempstr+k);
// 或者用 sscanf(tempstr+k,"%lf",&job[i].cost);
while(tempstr[k]!=' '&&tempstr[k]!='\0') k++;
while(tempstr[k] == ' ')
{
job[i].space[4]++;
k++;
}
i++;
}
range(job, i);
for(int j=0; j<i; j++)
{
for(int t=0; t<job[j].space[0]; t++)
cout << " ";
cout << job[j].str;
for(int t=0; t<job[j].space[1]; t++)
cout << " ";
cout << job[j].date;
for(int t=0; t<job[j].space[2]; t++)
cout << " ";
cout << job[j].time;
for(int t=0; t<job[j].space[3]; t++)
cout << " ";
cout << fixed << setprecision(3) << job[j].cost << "(s)";
for(int t=0; t<job[j].space[4]; t++)
cout << " ";
cout << endl;
}
system("pause");
return 0;
}
追问
谢谢!!
可是我们把数字当作字符来比较的话,原理不是一样的吗,为什么就不能用strcpy()来进行比较
追答
因为strcmp是左对齐比较
数字是右对齐比较
比方说strcmp就会判断1234比234要小
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询