在C编程中提取字符串和数字的字符串编号

时间:2014-11-22 05:52:47

标签: c string

是否有任何函数可以提取字符串中的数字返回数字字符串?

示例我有字符串:assdf4fdsdf65fsafda5想输出的是数字字符串:4 65 5 并且输入字符串未知长度为。

我知道可以提取的方式是:

char *str = "ab234cid*(s349*(20kd", *p = str;
while (*p) { // While there are more characters to process
    if (isdigit(*p)) { // Upon finding a digit,
        long val = strtol(p, &p, 10); // Read a number,
        printf("%ld\n", val); // and print it.
    } else { // Otherwise, move on to the next character.
        p++;
    }
}

是否有像char extract(char input,char output){ ... return output;}这样的功能谢谢

3 个答案:

答案 0 :(得分:1)

我不知道有任何可用的功能,但实施起来相当容易。以下代码假定output至少分配了strlen(input) + 2个字节。我将留给您删除它可能添加到output的尾随空格。

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

void extract(const char *input, char *output) {
  while (*input) {
    while (*input && !isdigit(*input)) ++input;
    while (isdigit(*input)) *output++ = *input++;
    *output++ = ' ';
  }
  *output = '\0';
}

int main(void) {
  char out[21];
  const char *in = "assdf4fdsdf65fsafda5";

  extract(in, out);
  printf("%s\n", out);
  return 0;
}

输出:4 65 5

答案 1 :(得分:-1)

是的,使用atoi你可以提取整数no。

int atoi(const char *str)

请参阅以下链接

https://stackoverflow.com/a/7842195/4112271

答案 2 :(得分:-1)

这样的事情(没有详尽测试):

#include <stdio.h>
#include <string.h>

char non_num[] = " !\"#$%&'()*+,-./;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\^_`abcdefghijklmnopqrstuvwxyz{|}~";

int
main(int argc, char **argv)
{

    char str[]   = "assdf4fdsdf65fsafda5";
    char *next   = str;
    char *strptr = str;

    while( (next = strtok(strptr, non_num)) != NULL )
    {
        printf("%s ", next);
        strptr = NULL;
    }
    printf("\n");


    return(0);


}