如何读取两个空格之间的数字?

时间:2014-03-24 16:40:40

标签: c

我有问题。假设我有

char a[50]={" 99 98 100 97 101 "};

我想要另一个字符串数组,它给我这样的值:

char b[50]={"bcdae"};

那该怎么办?

(a = 97的ASCII值等等)

3 个答案:

答案 0 :(得分:1)

#include <stdio.h>

int main() { 
    char a[50]={" 99 98 100 97 101 "};
    char b[50]={0};
    char *p = b; // p now points to b
    int i, num, pos = 0;

    // %d returns each number
    // %n returns the number of bytes consumed up to that point

    while(sscanf(a + pos, "%d%n", &num, &i)==1)
    {
        *p++ = (char)num; // b[0]..b[n] are set to num which is cast into a char
        pos += i; // increment the position by bytes read
    }
    printf("%s\n", b);//cbdae
    return 0;
}

答案 1 :(得分:1)

以下初始化看起来不像你的意思(虽然他们编译):

char a[50] = {" 99 98 100 97 101 "};
char b[50] = {"bcdae"};

如果你的意思是:

char a[50] = {99, 98, 100, 97, 101};
char b[50] = "bcdae";

然后两个数组的内容完全相同。


如果你的意思是:

char a[50] = {99 , 98 , 100,  97, 101};
char b[50] = {'b', 'c', 'd', 'a', 'e'};

然后两个数组的内容完全相同。


如果你的意思是:

char a[50] = " 99 98 100 97 101 ";
char b[50] = "bcdae";

这相当于你发布的内容,那么你可以使用它:

#include "string.h"

void a2b(char a[],char b[])
{
    int i = 0, j;
    char* pch = strtok(a," ");
    while (pch != NULL)
    {
        b[i] = 0;
        for (j=0; pch[j]!=0; j++)
        {
            b[i] *= 10;
            b[i] += pch[j]-'0';
        }
        i++;
        pch = strtok(NULL," ");
    }
    b[i] = 0;
}

但请注意,上述代码会更改第一个数组的内容。

答案 2 :(得分:-1)

"bcdae"只不过是一组数字:[99, 98, 100, 97, 101, 0]。毕竟,没有&#34;字母&#34;在计算机内存中,只是数字。最后一个数字0表示字符串的结尾。

所以,你的任务,似乎是从字符串中重复读取一个数字(检查scanf函数),并将读取值放入数字数组中。


提示:在解析数字时了解您阅读的字符数量可能会有所帮助 - 请检查Get number of characters read by sscanf?