c++中数组只存储token的第一个字符
Only the first character of token is stored in array in c++
int main(void)
{
char *text = (char*)malloc ( 100 *sizeof( char));
cout << "Enter the first arrangement of data." << endl;
cin.getline(text, 100);
char *token = strtok(text, " ");
char *data = (char*)malloc ( 100*sizeof( char));
while ( token != NULL )
{
if (strlen(token) > 0)
{
cout << token << endl; // to test if the token is correct so far.
data[Tcount++] = *token;
}
token = strtok(NULL, " ");
}
for(i = 0; i < Tcount; i++)
{
cout << data[i] << endl;
}
出于某种原因,当我输入用户输入 xp = a + 1 时,data[i] 的输出是:
x
=
一个
+
1
你知道为什么第一个标记(应该是 xp)只作为 x 存储在 data[] 中吗?
谢谢。
因为您的 token
数组是一个字符数组 (*char
)。您需要创建一个字符串数组 (**char
) 来存储 "xp",因为它不是 char
变量。
有几处不太正确。
"data[Tcount++] = *token;"
部分正在将值 "token"(字符)分配给也是字符的 "data[Tcount]"。
我相信 "data" 包含内存中 100 * sizeof (char) 开头的地址。当 "data[i]" 被访问时,它是一个单一的 "char"
for(i = 0; i < Tcount; i++) {
cout << data[i] << endl; }
- 如果要存储字符串列表(字符数组),则需要使用二维数组(或指针)以便每个数组(或指针)可以存储一个数组(或指针)。
例如,使用 data[][] 或 **data。如果您想刷新这些定义,请参阅下面的链接;
strtok 有一些您没有考虑到的内部状态。看这里:
http://www.cplusplus.com/reference/cstring/strtok/
这一行只抓取token的第一个字符:
data[Tcount++] = *token;
然后这一行跳到下一个标记(由于 strtok 的内部状态记住最后一个标记的位置):
token = strtok(NULL, " ");
您需要在包含这两行的while 循环中再嵌套一个循环,以便读取一个标记中的所有字符。只有这样你才能在不丢失数据的情况下再次调用strtok。
int main(void)
{
char *text = (char*)malloc ( 100 *sizeof( char));
cout << "Enter the first arrangement of data." << endl;
cin.getline(text, 100);
char *token = strtok(text, " ");
char *data = (char*)malloc ( 100*sizeof( char));
while ( token != NULL )
{
if (strlen(token) > 0)
{
cout << token << endl; // to test if the token is correct so far.
data[Tcount++] = *token;
}
token = strtok(NULL, " ");
}
for(i = 0; i < Tcount; i++)
{
cout << data[i] << endl;
}
出于某种原因,当我输入用户输入 xp = a + 1 时,data[i] 的输出是:
x
=
一个
+
1
你知道为什么第一个标记(应该是 xp)只作为 x 存储在 data[] 中吗?
谢谢。
因为您的 token
数组是一个字符数组 (*char
)。您需要创建一个字符串数组 (**char
) 来存储 "xp",因为它不是 char
变量。
有几处不太正确。
"data[Tcount++] = *token;"
部分正在将值 "token"(字符)分配给也是字符的 "data[Tcount]"。我相信 "data" 包含内存中 100 * sizeof (char) 开头的地址。当 "data[i]" 被访问时,它是一个单一的 "char"
for(i = 0; i < Tcount; i++) { cout << data[i] << endl; }
- 如果要存储字符串列表(字符数组),则需要使用二维数组(或指针)以便每个数组(或指针)可以存储一个数组(或指针)。 例如,使用 data[][] 或 **data。如果您想刷新这些定义,请参阅下面的链接;
strtok 有一些您没有考虑到的内部状态。看这里:
http://www.cplusplus.com/reference/cstring/strtok/
这一行只抓取token的第一个字符:
data[Tcount++] = *token;
然后这一行跳到下一个标记(由于 strtok 的内部状态记住最后一个标记的位置):
token = strtok(NULL, " ");
您需要在包含这两行的while 循环中再嵌套一个循环,以便读取一个标记中的所有字符。只有这样你才能在不丢失数据的情况下再次调用strtok。