在跳过空格时迭代字符数组

时间:2015-04-06 06:00:58

标签: c arrays string character

我试图编写一个迭代字符数组(包含一个句子)的程序,并将该句子中的单词分配给另一个数组,跳过空格(这就是我们知道单独单词的方式),然后打印这些单词。

比方说我的角色数组是:

{'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

4 个答案:

答案 0 :(得分:1)

我的建议,请跟strtok()一起去。这很容易。

这个想法:

  1. 使用strtok()和空格' '作为分隔符,找出每次出现的
  2. 使用strcpy()进行复制,将返回的token)复制到word数组。
  3. 注意:

      

    我希望我的函数将单词分配给数组,将其称为单词,一次一个,跳过空格,然后逐个打印单词。

    您当前的代码看起来并不像它一样。

    1. 你可以摆脱迭代输入字符串的for循环。
    2. 您需要在相同的输入上删除strtok(),直到它重新NULL
    3. 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]);
}