我有问题。假设我有
char a[50]={" 99 98 100 97 101 "};
我想要另一个字符串数组,它给我这样的值:
char b[50]={"bcdae"};
那该怎么办?
(a = 97的ASCII值等等)
答案 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?