我试图编写一个迭代字符数组(包含一个句子)的程序,并将该句子中的单词分配给另一个数组,跳过空格(这就是我们知道单独单词的方式),然后打印这些单词。
比方说我的角色数组是:
{'t','h','e',' ','f','o','x',' ','r','u','n','s','\0',}
我希望我的函数将单词分配给一个数组,称之为words
,一次一个,跳过空格,然后逐个打印单词。
我试过了:
for (i = 0, x = 0; a[i] != '\0'; i++, x++){
if (a[i] != ' '){
words[x] = a[i];
}
else{
words[x] = '\0';
printf("%s\n", words);
x=0;
i++;
continue;
}
}
printf("%s\n", words);
但是当我运行它时,它只打印出s
答案 0 :(得分:1)
我的建议,请跟strtok()
一起去。这很容易。
这个想法:
strtok()
和空格' '
作为分隔符,找出每次出现的字。strcpy()
进行复制,将返回的token
(字)复制到word
数组。注意:
我希望我的函数将单词分配给数组,将其称为单词,一次一个,跳过空格,然后逐个打印单词。
您当前的代码看起来并不像它一样。
for
循环。strtok()
,直到它重新NULL
。words[x]
需要是char *
(具有正确分配的内存)或char []
(数组)来保存从输入字符串中找到的每个字以及稍后一个接一个地打印。答案 1 :(得分:0)
继续进行for循环,您不需要i++
,您需要设置x=-1
。
for (i = 0, j = 0; a[i] != '\0'; i++, x++){
if (a[i] != ' '){
words[x] = a[i]; // U need to use j
}
else{
words[x] = '\0';
printf("%s\n", words);
x=-1; // as you are using continue
// i++; You don't need this
continue;
}
}
printf("%s\n", words);
答案 2 :(得分:0)
这是完整的程序吗?
words[x] = a[i];
每次找不到空格时,您可能希望将words[x]
放入x
1
递增的循环中。
好的,我发现你已编辑过了。此外,它是一个数组,所以我想你需要遍历数组并打印每个字符。
用于打印,
for (j = 0; j < sizeof(words)/sizeof(words[0]); j++ )
{
printf("%c", words[j] );
}
答案 3 :(得分:0)
请注意,编译器默认将变量(除了显式设置为字符串的数组a
除外)在main之外定义,并且不需要显式初始化,但是你必须非常小心一般的初始化,特别是在函数内。
a
虽然被定义为字符串文字的指针,但也可以作为字符数组进行访问。
输出:
words[0] = the
words[1] = fox
words[2] = runs
这有效:
#include <stdio.h>
#define MAX_WORDS 1000
#define MAX_WORD_LEN 32
char *a = "the fox runs";
char words[MAX_WORDS][MAX_WORD_LEN];
int i, j, k;
int
main(void)
{
for (i = 0; k < MAX_WORDS && a[i] != '\0'; i++) {
if (a[i] != ' ' && j <= 32) {
words[k][j++] = a[i];
} else {
words[k++][j] = '\0';
printf("words[%d] = %s\n", k - 1, words[k - 1]);
j = 0;
}
}
printf("words[%d] = %s\n", k, words[k]);
}