以下是本人做的一题目,都是自己写的,能力有限,如果有什么问题,谢谢大家指出!
1. 从两个数组的最后一个元素比较两个数组中不同元素的个数,如有array1[5]={77,21,1,3,5}, array2[3]={1,3,5},从array1[4]与array2[2]比较开始,到array1[2]与array[0]比较结束。这样得出它们不同的元素个数为0,若array1[6]={77,21,1,3,5,7},那么他们不同的元素为3。 函数原型为 int compare_array( int len1, int array1[], int len2, int array2[] ); 其中,len1与len2分别为数组array1[]和array2[]的长度,函数返回值为两个数组不同元素的个数。
int compare_array(int len1, int array1[],int len2, int array2[])
{
int k=0;
int i=len2-1;
int j=len1-1;
while((i>=0)&&(j>=0))
{
if(array1[j]!=array2[i])
k++;
i--;
j--;
}
return k;
}
2.通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。
比如字符串“abacacde”过滤结果为“abcde”。
要求实现函数:
void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr);
【输入】 pInputStr: 输入字符串
lInputLen: 输入字符串长度
【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
void stringFilter(const char *pInputStr,long lInputLen, char *pOutputStr)
{
void stringFilter(const char *pInputStr,long lInputLen, char *pOutputStr)
{
const char* ptr = pInputStr;
char* output = pOutputStr;
int a[26] = {0};
while( *ptr != '\0')
{
a[*ptr - 'a']++;
if(a[*ptr - 'a'] > 1)
{
ptr++;
}
else
{
*output = *ptr;
ptr++;
output++;
}
}
*output = '\0';
}
3、通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr)
{
const char* ptr=pInputStr;
char *result=pOutputStr;
int k=0;
char c= *ptr;
while(*ptr !='\0')
{
if(c == *ptr)
{
ptr++;
k++;
}
else
{
if(k>1)
{
*result++=(char)(k+'0');
}
*result++=c;
k=1;
c=*ptr++;
}
}
if(k>1)
{
*result++=(char)(k+'0');
}
*result++=c;
*result='\0';
}
4、通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。
输入字符串的格式为:“操作数1 运算符 操作数2”,“操作数”与“运算符”之间以一个空格隔开。
说明:
1. 操作数为正整数,不需要考虑计算结果溢出的情况。
2. 若输入算式格式错误,输出结果为“0”。
要求实现函数:
void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr);
【输入】 pInputStr: 输入字符串
lInputLen: 输入字符串长度
【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr)
{
const char *input = pInputStr;
char * output = pOutputStr;
char* data1= (char*) malloc(lInputLen);
char* left=data1;
char* right;
int d1,d2;
char yuns;
while (*input!='\0')
{
if((*input=='+')||(*input=='-'))
{
yuns=*input++;
break;
}
else
{
*left++=*input++;
}
}
*left='\0';
input++;
if((*data1<='0')||(*data1>='9')||(( *input<='0')||(*input>='9')))
{
*output++='0';
*output='\0';
return;
}
d1=atoi(data1);
d2=atoi(input);
if(yuns=='+')
itoa(d1+d2,output,10);
else
itoa(d1-d2,output,10);
}