练习使用strcmp, strncmp函数并自己编程实现strcmp, strncmp函数;
(提示:查看man手册)
1.c
/**
* @file 1.c
* @brief 练习使用strcmp, strncmp函数并自己编程实现strcmp, strncmp函数
* @author GuoPengyu
* @version 0.1
* @date 2011-09-09
*/
#include <stdio.h>
#include <string.h>
int my_strcmp(char *s1, char *s2)
{
while(*s1 == *s2)
{
if(*s1 == '\0')
return 0;
s1++;
s2++;
}
return (*s1 > *s2 ? 1 : -1);
}
int my_strncmp(char *s1, char *s2, int n)
{
if(!n)
return 0;
while(*s1 == *s2)
{
if(*s1 == '\0' || !(--n))
return 0;
s1++;
s2++;
}
return (*s1 > *s2 ? 1 : -1);
}
int main(int argc, const char *argv[])
{
char *p = "akaedu1", *q = "akadeu", *str = "helaka";
printf("%d\n", strcmp(p, q));
printf("%d\n", my_strcmp(p, q));
printf("strncmp = %d\n", strncmp(p, str,3));
printf("my_strncmp = %d\n", my_strncmp(p, str, 3));
return 0;
}
从命令行读取数据, 要求用户输入的日期形式为:8/25/2011,并且假设日期中没有空 格,执行后显示的数据格式为:August 25,2011,如果没有按照指定格式录入日期, 那么程序显示出错次信息;(提示:可以使用sscanf函数从命令行截取出年,月,日)
关于命令行的例子:
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("argc = %d\n", argc);
printrf("argv[0] = %s\n", argv[0]);
printrf("argv[1] = %s\n", argv[1]);
printrf("argv[2] = %s\n", argv[2]);
return 0;
}
编译完成后,在执行的时候,键入:./app hello akaedu 回车;
2.c
/**
* @file 2.c
* @brief 从命令行读取数据,
* 要求用户输入的日期形式为:8/25/2011,并且假设日期中没有空
* 格,执行后显示的数据格式为:August 25,2011,如果没有按照指定格式录入日期,
* 那么程序显示出错次信息;(提示:可以使用sscanf函数从命令行截取出年,月,日)
* @author GuoPengyu
* @version 0.1
* @date 2011-09-09
*/
#include <stdio.h>
int main(int argc, const char *argv[])
{
char *mon[13] = {NULL,"January","Febrary","March","April","May","June","July",
"August","September","October","November","December"};
int year, month, day, ret;
if(argc != 2)
{
printf("Please Usage : ./XX 8/25/2011\n");
return 0;
}
ret = sscanf(argv[1], "%d/%d/%d", &month, &day, &year);
if(ret != 3)
{
printf("Error!\n");
return 0;
}
printf("%s %d, %d\n", mon[month], day, year);
return 0;
}
用结构体数组实现5个学生的成绩统计。功能包括
1)输入学生的学号,姓名,成绩;
2)按成绩由高到低进行排序并打印结果,并且60及60分以上的学生打印出标志“pass”,
60分以下的学员打印出标志“fail”; 3.c
/**
* @file 3.c
* @brief 用结构体数组实现5个学生的成绩统计。功能包括
* 1)输入学生的学号,姓名,成绩;
* 2)按成绩由高到低进行排序并打印结果,并且60及60分以上的学生打印出标志“pass”,
* 60分以下的学员打印出标志“fail”;
* @author GuoPengyu
* @version 0.1
* @date 2011-09-09
*/
#include <stdio.h>
#define N 3
typedef struct student
{
int id;
char name[10];
int score;
}stu_t;
int main(int argc, const char *argv[])
{
stu_t stu[N], tmp;
int i, j, pos;
for(i = 0; i < N; i++)
scanf("%d %s %d", &stu[i].id, stu[i].name, &stu[i].score);
for(i = 0; i < N-1; i++)
{
pos = i;
for(j = i+1; j < N; j++)
{
if(stu[pos].score < stu[j].score)
pos = j;
}
if(pos != i)
{
tmp = stu[pos];
stu[pos] = stu[i];
stu[i] = tmp;
}
}
printf("id\t%-10s\tscore\tgrade\n", "name");
for(i = 0; i < N; i++)
{
printf("%d\t%-10s\t%d\t%s\n", stu[i].id, stu[i].name, stu[i].score, stu[i].score >= 60 ? "pass" : "fail");
}
return 0;
}