这是在通用排序函数中使用的比较函数。 import React, { Component } from 'react';
export default class Home extends Component {
render() {
return (
<div>Homepage</div>
);
}
}
和x
是要与通用排序功能进行比较的元素。
y
调用函数一次又一次地调用int CompInt(void *x, void *y)
{
int a = *((int*)x);
int b = *((int*)y);
int choice;
printf("How do you want to sort ? \n\t1. Ascending \n\t2. Descending\n");
scanf(" %d ", &choice);
if(choice == 1)
{
if(a > b) return -1;
else return 1;
}
if(choice == 2)
{
if(a > b) return 1;
else return -1;
}
}
函数而不执行比较。它不断打印
CompInt
有什么方法可以为升序或降序提供选项吗?
这就是我调用函数的方式
how do you want to sort?`
1. ascending
2. descending
答案 0 :(得分:1)
我认为你应该做两个功能。如果选择升序。 像这样。
int Ascending(void * a, void * b)
{
int inter_a = *((int*)(a)); int inter_b = *((int*)(b));
if(inter_a > inter_b)
return -1;
else
return 1;
}
int Descending(void * a, void * b)
{
int inter_a = *((int*)(a)); int inter_b = *((int*)(b));
if(inter_a < inter_b)
return -1;
else
return 1;
}
用户可以选择主要功能。使用升序或降序。而你调用函数用户选择函数。
if(choice == 1)
{
Sort((void*)num, Ascending, sizeof(int), max);
}
else
{
Sort((void*)num, Descending, sizeof(int), max);
}
和CompStr。我想你应该使用string.h。
CompStr有问题。如果a [i] =='a',b [i] =='D'。 CompStr认为a [i]首先是comp。你应该这样使用。
int CompStr(void *x, void *y)
{
char *a = (char*)x;
char *b = (char*)y;
int c1 = 0, c2 = 0, cmp = 0, i = 0;
while(a[c1] != '\0') c1 += 1;
while(b[c2] != '\0') c2 += 1;
while((i < c1) && (i < c2))
{
char compA = tolower(a[i]);
char compB = tolower(b[i]);
if(compA == compB)
{
i++;
continue;
}
if(compA < compB)
{
cmp = (-1);
break;
}
if(compA > compB)
{
cmp = 1;
break;
}
}
return cmp;
}
和测试代码=
int main()
{
//first exmaple.
char * str1 = "Hallo.";
char * str2 = "Hello.";
//second exmaple.
char * str3 = "What Does Fox Say?";
char * str4 = "IDOLM@STER";
//third example.
char * str5 = "Stack Overflow.";
char * str6 = "Stack Overflow.";
int result = CompStr((void *)str1, (void *)str2);
int result1 = CompStr((void *)str3, (void *)str4);
int result2 = CompStr((void*)str5, (void*)str6);
printf("1 : %d\n", result);
printf("2 : %d\n", result1);
printf("3 : %d", result2);
return 0;
}
输出为1 : -1 2: 1 3: 0
代码运行良好。
此代码有问题。
case 4:
{
printf("How many Strings you want to sort ? ");
scanf("%d", &max);
printf("Enter the strings\n");
for (i = 0; i < max; i++) scanf(" %s", str[i]);
Sort((void*)str, CompStr, sizeof(char), max);
printf("Sorted elements are are - \n");
for (i = 0; i < max; i++) printf(" %s\n", str[i]);
break;
}
你想要比较字符串。但sizeof元素只有1个字节。你re code can
编译。
void *mem_copy(void *dest, const void *src, unsigned int n)
{
int i;
char* newsrc = (char*)src;
char* newdest = (char*)dest;
for (i = 0; i < n; i++)
newdest[i] = newsrc[i];
}
我使用编译VS 2017,你写的返回类型是void *,但函数是dosen`t返回。是正确的代码?请修改代码编译好。