自己code出来的,结果是正确的,但是其中还有很多的优化之处,还请各位大神多多指导。
代码打包: http://download.csdn.net/detail/sxlwzl/6259411
1.字符串过滤 stringFilter
去重过滤,例子:"abcdabefe"-->"abcdef"
2.字符串压缩 stringZip
"aaaabbccccddeeeeef"-->"4a2b4c2d5ef"
3.表达式,100以内的正整数,加减运算
"4 + 7"-->"11"
"2 - 7"-->"-5"
"2 ++ 7"-->"0" //注意:非法运算
ex1.h
/*
1.字符串过滤 stringFilter
去重过滤,例子:
"abcdabefe"-->"abcdef"
*/
#ifndef EX1_H_INCLUDED
#define EX1_H_INCLUDED
#define MAX_LENGTH 1000
int stringFilter(void);
#endif // EX1_H_INCLUDED
ex1.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "ex2.h"
int stringFilter(void)
{
char input[MAX_LENGTH];
char *p_input = input;
char ch;
int size_input=0;
char new_output[MAX_LENGTH];
char *p_new = new_output;
int j=0;
int k=0;
int eq = 0;
while( (ch = getchar())!= '\n' )
{
input[size_input] = ch;
size_input++;
}
input[size_input] = '\0';
for(j=0; j < size_input; j++)
{
eq = 0;
for(k=0; k<j;k++)
{
if(new_output[k] == input[j])
{
eq = 1;
break;
}
}
if (eq == 0)
{
*p_new = input[j];
p_new++;
}
}
*p_new = '\0';
printf("input = %s\n", input);
printf("output = %s\n", new_output);
return 0;
}
/*
2.字符串压缩 stringZip
"aaaabbccccddeeeeef"-->"4a2b4c2d5ef"
*/
#ifndef EX2_H_INCLUDED
#define EX2_H_INCLUDED
#define MAX_LENGTH 1000
int stringZip(void);
#endif // EX2_H_INCLUDED
ex2.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "ex2.h"
int stringZip(void)
{
char input[MAX_LENGTH];
char *p_input = input;
char ch;
int size_input=0;
char new_output[MAX_LENGTH];
char *p_new = new_output;
int j=0;
int k=0;
int duplicate_flag = 0;
while( (ch = getchar())!= '\n' )
{
input[size_input] = ch;
size_input++;
}
input[size_input] = '\0';
while(j<size_input)
{
new_output[j] = '\0';
j++;
}
*p_new = input[0];
for(j=1; j < size_input; j++)
{
if(input[j] == input[j-1])
{
duplicate_flag ++;
if(duplicate_flag == 1)
p_new++;
*p_new = '0' + duplicate_flag + 1;
}
else
{
duplicate_flag = 0;
p_new++;
*p_new = input[j];
}
}
p_new++;
*p_new = '\0';
//printf("strlen of new_output : %d\n", strlen(new_output));
printf("%s\n", new_output);
return 0;
}
ex3.h
/*
3.表达式,100以内的正整数,加减运算
"4 + 7"-->"11"
"2 - 7"-->"-5"
"2 ++ 7"-->"0" //注意:非法运算
*/
#ifndef EX3_H_INCLUDED
#define EX3_H_INCLUDED
#define MAX_LENGTH 1000
int my_calc(void);
#endif // EX3_H_INCLUDED
ex3.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "ex3.h"
int my_calc(void)
{
char input[MAX_LENGTH];
char *p_input = input;
int first_num=0;
int second_num=0;
int acture_size;
char num_flag = 0;
char func_flag = 0;
char ch;
int i=0;
while( (ch = getchar())!= '\n' )
{
input[i] = ch;
i++;
}
input[i] = '\0';
//printf("i = %d\n",i);
//printf("acture_input is : %s\n", input);
while(i > 0)
{
i--;
//printf("%d\t %c \n",*p_input, *p_input);
if(*p_input >= '0' && *p_input <= '9')
{
num_flag = 1;
if(func_flag == 0)
first_num = first_num * 10 + (*p_input - '0');
else
second_num = second_num * 10 + (*p_input - '0');
}
else
if(num_flag ==0)
{
printf("input error!\n");
return 0;
}
else
if(*p_input == '+')
{
if(func_flag == 0)
{
func_flag = 1;
}
else
{
printf("input error!\n");
return 0;
}
}
else if(*p_input == '-')
{
if(func_flag == 0)
{
func_flag = 2;
}
else
{
printf("input error!\n");
return 0;
}
}
p_input++;
/*
printf("first_num = %d\t", first_num);
printf("second_num = %d\t", second_num);
printf("num_flag = %d\t", num_flag);
printf("func_flag = %d\n", func_flag);
*/
}
if (func_flag == 1)
printf("%d + %d = %d \n",first_num, second_num, first_num + second_num);
else if (func_flag == 2)
printf("%d - %d = %d \n",first_num, second_num, first_num - second_num);
return 0;
}
main.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "ex1.h"
#include "ex2.h"
#include "ex3.h"
int main()
{
printf("Enter main()\n");
char option;
puts("\nex1:");
puts("1.字符串过滤 stringFilter");
puts("去重过滤,例子:");
puts("\"abcdabefe\"-->\"abcdef\"");
do
{
stringFilter();
printf("if you want try anohter test, please input 'y' or input 'n'.\n");
fflush(stdin);
option = getchar();
fflush(stdin);
}while(option == 'y' || option == 'Y');
puts("\nex2:");
puts("2.字符串压缩 stringZip");
puts("\"aaaabbccccddeeeeef\"-->\"4a2b4c2d5ef\"");
do
{
stringZip();
printf("if you want try anohter test, please input 'y' or input 'n'.\n");
fflush(stdin);
option = getchar();
fflush(stdin);
}while(option == 'y' || option == 'Y');
puts("\nex3:");
puts("3.表达式,100以内的正整数,加减运算");
puts("\"4 + 7\"-->\"11\"");
puts("\"2 - 7\"-->\"-5\"");
puts("\"2 ++ 7\"-->\"0\"");
do
{
my_calc();
printf("if you want try anohter test, please input 'y' or input 'n'.\n");
fflush(stdin);
option = getchar();
fflush(stdin);
}while(option == 'y' || option == 'Y');
return 0;
}