从字符串中提取整数

发布于 2024-12-10 23:38:59 字数 273 浏览 0 评论 0原文

我有一个输入参数字符串 const char* s 我知道它启动了整数表示的字符序列,该序列可以是任意长度,包括 0。 在整数序列之后是不是整数表示的字符序列。 例如“23meeting”,“1h”。 是否有一些(内置)C 函数可以提取整数? 例如,对于“23meeting”,可以执行此类操作:

int x = needed_function("23meeting"); //results x = 23

谢谢

I have an input argument string const char* s
I know that it starts the sequence of chars which are integers representation ,this sequence could be of any length ,including 0.
After the integer sequence follows sequence of chars which are not integer representation.
for example "23meeting","1h".
Is there some (builtin) C function which can extract the integer?
For example for "23meeting" such operation could be performed :

int x = needed_function("23meeting"); //results x = 23

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

似最初 2024-12-17 23:38:59

您可以迭代字符串并给出获取数字的条件

num=0;
for(i=0;str[i]!='\0';i++) {
if(str[i]>=48 && str[i]<=57)
 num=num*10+(str[i]-48);
  printf("\n%d",num);
} 

You can iterate through the string and can give the condition to get numbers

num=0;
for(i=0;str[i]!='\0';i++) {
if(str[i]>=48 && str[i]<=57)
 num=num*10+(str[i]-48);
  printf("\n%d",num);
} 
牛↙奶布丁 2024-12-17 23:38:59

atoi() 应该可以正常工作。它应该停在第一个非数字字符处。

int x = atoi("23meeting")

编辑:注释暗示 atoi() 不是线程安全的或已从语言中弃用。这里有一些关于该函数的线程安全性的讨论:

为什么 OSX 将 atoi/atof 记录为不是线程安全的?

有人可以提供 atoi 不是线程安全的参考吗?

据我所知 atoi() 位于 C99 中,这是最新的标准(7.20.1.2)。

atoi() should work fine for this. It should stop at the first non-numeric character.

int x = atoi("23meeting")

EDIT: A comment implies that atoi() is not thread safe or is deprecated from the language. There is some discussion of the thread safety of this function here:

Why does OSX document atoi/atof as not being threadsafe?

Can someone provide a reference to atoi not being thread safe?

And as far as I can tell atoi() is in C99 which is the latest standard (7.20.1.2).

慈悲佛祖 2024-12-17 23:38:59

尝试 atoi() 或完整的 strtol()

int x = atoi("23meeting");
int x = (int)strtol("23meeting", (char **)NULL, 10);

检查系统上的手册页(Unix 中的第 3 节)。

Try atoi() or the complete strtol():

int x = atoi("23meeting");
int x = (int)strtol("23meeting", (char **)NULL, 10);

Check the man pages on your system (section 3 in Unix).

夏九 2024-12-17 23:38:59

一种方法是使用 sscanf:

char *str = "23meeting";
unsigned x;
sscanf(str, "%u", &x);
printf("%u\n", x);

不过,为了进行额外的错误检查,您必须执行一些额外的手动检查。

One way would be to use sscanf:

char *str = "23meeting";
unsigned x;
sscanf(str, "%u", &x);
printf("%u\n", x);

For additional error-checking, though, you'll have to do some additional manual checks.

只想待在家 2024-12-17 23:38:59

atoi() 应该做你想做的尽管更强大的实现将使用 strtol()

atoi() should do what you want to, although a more robust implementation would use strtol().

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文