需要从字符串中删除空格和字母表的多位数输入

时间:2013-07-18 14:17:52

标签: c linux

我正在编写一个程序,我将字符串作为输入,在这里我需要删除空格,忽略字母并仅使用数字。

我能够删除空格和字母,但我只能使用单个数字而不是多个数字。

示例:输入字符串:“adsf 12af 1 a123c 53c2m34n”

在这里,我需要将输入用作我的应用程序所需的“12 1 123 54234”。

很高兴有人可以分享逻辑或示例代码。

提前致谢

4 个答案:

答案 0 :(得分:1)

这是你的功能:

void remove_func(char *str)
{
int i;

i = 0;
while(str[i])
{
if(str[i] >= '0' && str[i] <= '9')
{
putchar(str[i]);
i++;
}
else if(str[i] == ' ' && str[i + 1] != ' ')
{
putchar(str[i]);
i++;
}
else
i++;
}
}

答案 1 :(得分:1)

int i = 0;int j = 0;
while (input[i])
{
  if (input[i] == ' ' || (input[i] >= '0' && input[i] <= '9'))
     newString[j++] = input[i];
  i++;
}
newString[j] = '\0';

如果你这样做,你只会将数字和空格复制到newString中。我让你做所有内存分配的东西。

答案 2 :(得分:1)

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

int pullOut(const char *str, int array[], int *size){
    const char *p = str, *endp;
    int pull, count = 0, max = *size, num;

    do{
        endp=strchr(p, ' ');
        if(endp == NULL)
            endp=strchr(p, '\0');

        for(num=pull=0; p != endp; ++p){
            if(isdigit(*p)){
                num = num * 10 + *p - '0';
                pull = 1;
            }
        }
        if(pull && count < max)
            array[count++] = num;

        while(*p == ' ')
            ++p;//skip sapce
    }while(*endp != '\0');

    return *size = count;
}

int main(void){
    char input[] = "adsf 12af   1 a123c 53c2m34n abc def";
    int i, arr[128] = { 0 }, arr_num = sizeof(arr)/sizeof(int);

    pullOut(input, arr, &arr_num);

    for(i = 0; i < arr_num ; ++i)
        printf("%d\n", arr[i]);

    return 0;
}

答案 3 :(得分:1)

这个怎么样:

char * getNumbers(const char *src, char *dst)
{
    int j=0,i=0;
    while (i < strlen(src))
    {
        if (src[i] >= '0' && src[i] <= '9') 
        {
            dst[j++]=src[i++];
        }
        else
        {
            // skip duplicates spaces
            if (j > 0 && src[i] == ' ' && dst[j-1] != ',') dst[j++]=',';
            i++;
        }
    }
    // remove the trailing ',' if exists
    if (j > 0 && dst[j-1] == ',') j--; 
    dst[j]='\0';
    return dst;
}


char src[] = "adsf 12af 1 a123c 53c2m34n";
char dst[sizeof(src)];
getNumbers(src, dst);

printf("'%s' -> '%s'\n", src, dst);

输出: 'adsf 12af 1 a123c 53c2m34n' - &gt; '12,1,123,53234'