gpt4 book ai didi

检查表示数字的字符串的有效性

转载 作者:太空宇宙 更新时间:2023-11-04 03:14:58 26 4
gpt4 key购买 nike

我需要编写一个函数来检查字符串的一些属性:

  1. 字符串必须代表一个正整数(>0)
  2. 整数不能占用超过 32 位的内存
  3. 字符串中没有字母

如果满足这些条件,它应该将字符串作为 int 返回,如果不满足这些条件中的任何一个,它应该返回 -1。

目前该函数无法处理以下 2 个输入:

  • 4y
  • 13.4

如果我的 isDigit() 循环按预期工作,它将能够检查它们。为什么循环不起作用?

int convert(const char length[]) {
long input = atol(length);
if (input >= 2147483648 || input <= 0) {
return -1;
}
int chkr = 0;
while (chkr < strlen(length)) {
if (isdigit(length[chkr++]) == 0) {
return -1;
}
else {
return atoi(length);
}
}
input = atol(length);
if (length[0] == '0') {
return -1;
}
if (strlen(length) < 3) {
return -1;
}
else {
return atoi(len gth);
}
}

最佳答案

你的函数非常复杂而且错误。

改用它,让 C 库完成肮脏的工作:

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <ctype.h>

// The function you're interested in

int convert(const char string[]) {
char *endptr;
if (!isdigit((unsigned char)string[0]))
return -1;

errno = 0; // need to set errno to 0 (see errno documentation)
long value = strtol(string, &endptr, 10);
if (errno != 0 || value <= 0 || value > 2147483647 || *endptr != 0)
{
return -1;
}
return value;
}

int main() {
// Test different cases:

struct {
const char *input;
int expected;
} testcases[] =
{
// OK cases
"123", 123,
"1234", 1234,
"2147483647", 2147483647,

// fail cases
"-1234", -1, // number is negatif
"12.3", -1, // contains non digit '.'
"123y", -1, // contains non digit 'y'
"2147483648", -1, // out of range
" 123", -1, // starts with a space

// wrong test case on purpose
"1234", 1245,
};

// Test all test cases

for (int i = 0; i < sizeof(testcases) / sizeof(testcases[0]); i++)
{
int value = convert(testcases[i].input);
if (value != testcases[i].expected)
{
printf("convert(\"%s\") failed, returned value = %d, expected value = %d\n", testcases[i].input, value, testcases[i].expected);
}
else
{
printf("convert(\"%s\") passed\n", testcases[i].input);
}
}
return 0;
}

程序打印每个测试用例。最后一个测试用例是故意错误的。

for 循环循环遍历多个测试用例,并为每个失败的测试用例打印所涉及的值。

输出:

convert("123") passed
convert("1234") passed
convert("2147483647") passed
convert("-1234") passed
convert("12.3") passed
convert("123y") passed
convert("2147483648") passed
convert("1234") failed, returned value = 1234, expected value = 1245

关于检查表示数字的字符串的有效性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52893847/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com