该函数接收单个字符串以及将存储最小值和最大值的地址。例如,当字符串1 + 2 + 3通过时,该函数应该在min和3中包含的地址存储1,并且地址包含最大值。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void maxValue(char *s, int *min, int *max);
int main(void)
{
int i,col, min, max;
char *text[] = {"1+2+3"};
col = sizeof(text)/sizeof(text[0]);
for(i=0; i<col; i++)
{
maxValue(text[i], &min, &max);
printf("min = %d, max = %d", min, max);
}
}
void maxValue(char *s, int *min, int *max)
{
int i;
char* temp = malloc(strlen(s) + 1);
char* del = "+";
char* token;
strcpy(temp, s);
token = strtok(temp, del);
int stringInts = atoi(token);
for(i=0; i<stringInts; i++)
{
if(*min < stringInts)
*min = stringInts;
if (*max > stringInts) {
*max = stringInts;
}
}
}
此功能无法正常工作。有人可以指出我做错了吗?
答案 0 :(得分:3)
您需要在许多地方验证语法和strtok的使用。随着你前进C,每一行,每个角色都很重要。如果你不知道它为什么存在,那么......看看吧......
就是这样,您已经粗略地使用maxValue
函数从字符串中提取min和max。你在点击我的时候遇到了挑战并且越过了它以使它发挥作用。虽然有很多方法可以做到这一点,坚持你的方法,这可能是你正在尝试的工作实现:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void maxValue(char *s, int *min, int *max);
int main(void)
{
int min = 0, max = 0;
char text[] = "1+2+3";
maxValue (text, &min, &max);
printf("\nmin = %d, max = %d\n\n", min, max);
return 0;
}
void maxValue(char *s, int *min, int *max)
{
char* temp = malloc(strlen(s) + 1);
char* del = "+";
int token[3];
strcpy(temp, s);
token[0] = atoi (strtok(temp, del));
token[1] = atoi (strtok(NULL, del));
token[2] = atoi (strtok(NULL, del));
int i = 0;
*min = token[0];
*max = token[0];
for(i=0; i<3; i++)
{
*max = (*max < token[i]) ? token[i] : *max;
*min = (*min > token[i]) ? token[i] : *min;
}
}
输出:
min = 1, max = 3
每次声明一个变量,初始化它,给它一个值,除非你有充分的理由推迟它。考虑是否需要数组或指向数组的指针。另外,如果你正在处理3个值,你真的需要一个循环吗?所有都是你应该评估和决定的考虑因素。如上所述,这只是一种做你正在尝试的方法。它远非最好的方式,但目的是向您展示您正在做的事情 - 只需要一点点修饰(和语法)就可以了。
要概括maxValue
以便它可以处理s
中的任意数量的值,您只需要重新编写逻辑。回想一下,上面的例子是为了实现原始代码的建议。您可以消除大部分逻辑,并将其替换为一个简单的while
循环,用于检查strtok
的返回值以及是否NULL
测试最小值/最大值。例如:
void maxValue(char *s, int *min, int *max)
{
char* temp = malloc(strlen(s) + 1);
char* del = "+";
int token;
char* ptr = NULL;
strcpy(temp, s);
token = atoi (strtok(temp, del));
*min = token;
*max = token;
while ((ptr = strtok(NULL, del)) != NULL)
{
token = atoi (ptr);
*max = (*max < token) ? token : *max;
*min = (*min > token) ? token : *min;
}
}
输入:
char text[] = "1+2+3+4+5+6";
输出:
min = 1, max = 6