写在前面
转专业之后正式要开始学习数据结构和程序设计了,就把这里当成一个笔记本,写一写平时的作业,顺便让自己加深印象。
1. 扩展
从键盘输入包含扩展符’-'的字符串,将其扩展为等价的完整字符,例如将a-d扩展为abcd,并输出扩展后的字符串。
要求:只处理[a-z]、[A-Z]、[0-9]范围内的字符扩展,当且仅当后面的类型和前面相等时,且前一个字符小于后一个字符时,才进行扩展。
思路:输入一行字符串,把它们全部读入到一个数组中存储起来,然后把数组输出,输出的同时判断是否有符号“-”,有的话再判断前一个字符和后一个字符,如果可以扩展,则输出新的扩展的字符(例如:a-d输出bc)。
#include <stdio.h>
#include <string.h>
int getType(char ch) //判断对应的类型
{
if(ch>='A'&&ch<='Z')
{
return 1; //大写字母
}
else if(ch>='a'&&ch<='z')
{
return 2; //小写字母
}
else if(ch>='0'&&ch<='9')
{
return 3; //数字
}
}
int main()
{
char str[5000]={
'0'};
scanf("%s",str); //输入字符串
int i=0,j=strlen(str)-1;
for(i=0;i<=j;i++)
{
printf("%c",str[i]);
if(str[i+1]=='-')
{
if(getType(str[i])==getType(str[i+2])&&str[i]<str[i+2]) //判断是否需要处理字符串
{
str[i]++;
while(str[i]<str[i+2])
{
printf("%c",str[i]++); //输出字母
}
i++; //出循环起点往后移一位
}
}
}
printf("\n");
return 0;
}
2.计算
从标准输入中读入一个整数算术运算表达式,如5 + 12 / 2 / 2 = 。计算表达式结果,并输出。
要求:表达式运算符只有计算符号表达式末尾的’=’字符表示表达式输入结束,表达式中可能会出现空格;表达式中不含圆括号,不会出现错误的表达式;出现除号/时,以整数相除进行运算,结果仍为整数,例如:5/3结果应为1。
思路:我们可以建立两个栈,一个用来装数字,另一个用来装运算符号,当存进去的运算符号为“*”或者“/”时,对数字的栈顶上的两个数进行相应的计算,计算完成后再将结果存入栈中,并且把两个栈的栈顶都向下移一位,最后只剩下“+”“-”,重复上面的操作即可。
#include <stdio.h>
#include <string.h>
#define N 100000
long long stack[N];
int cal[N];
int tops=-1,topc=-1; //数字的栈顶和符号的栈顶
char s[N];
int getop(char c) //获取运算符号类型
{
if(c=='*')return 1;
else if(c=='/')return 2;
else if(c=='+')return 3;
else return 4;
}
int isNum(char c) //判断是否为数字
{
if(c>='0'&&c<='9')return 1;
return 0;