gpt4 book ai didi

c++ - 测试字符串以查看是否存在数字并将值分配给变量同时跳过所有非数字值?

转载 作者:太空狗 更新时间:2023-10-29 20:48:52 25 4
gpt4 key购买 nike

给定一个字符串“a 19 b c d 20”,我如何测试该字符串的特定位置是否有数字? (不仅是字符“1”,还有整数“19”和“20”)。

char s[80];
strcpy(s,"a 19 b c d 20");

int i=0;
int num=0;
int digit=0;
for (i =0;i<strlen(s);i++){
if ((s[i] <= '9') && (s[i] >= '0')){ //how do i test for the whole integer value not just a digit

//if number then convert to integer
digit = s[i]-48;
num = num*10+digit;
}

if (s[i] == ' '){
break; //is this correct here? do nothing
}
if (s[i] == 'a'){
//copy into a temp char
}
}

最佳答案

这些是 C 解决方案:

您只是想从字符串中解析出数字吗?然后您可以使用 strtol() 遍历字符串。

long num = 0;
char *endptr = NULL;
while (*s) {
num = strtol(s, &endptr, 10);
if (endptr == s) { // Not a number here, move on.
s++;
continue;
}
// Found a number and it is in num. Move to next location.
s = endptr;
// Do something with num.
}

如果您有具体的位置和电话号码要检查,您仍然可以做类似的事情。
例如:'19' 是否在第 10 位?

int pos = 10;
int value = 19;
if (pos >= strlen(s))
return false;
if (value == strtol(s + pos, &endptr, 10) && endptr != s + pos)
return true;
return false;

您是否尝试在不使用任何库例程的情况下解析出数字?

注意:我还没有测试过这个...

int num=0;
int sign=1;
while (*s) {
// This could be done with an if, too.
switch (*s) {
case '-':
sign = -1;
case '+':
s++;
if (*s < '0' || *s > '9') {
sign = 1;
break;
}
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
// Parse number, start with zero.
num = 0;
do {
num = (num * 10) + (*s - '0');
s++;
} while (*s >= '0' && *s <= '9');
num *= sign;
// Restore sign, just in case
sign = 1;
// Do something with num.
break;
default:
// Not a number
s++;
}
}

关于c++ - 测试字符串以查看是否存在数字并将值分配给变量同时跳过所有非数字值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2394815/

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