Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何迭代每个由空格分隔的单词?_C_String_Ansi - Fatal编程技术网

C 如何迭代每个由空格分隔的单词?

C 如何迭代每个由空格分隔的单词?,c,string,ansi,C,String,Ansi,我正在寻找一种方法来迭代从C中的getchar()函数收集的字符串中的每个单词。我不能使用指针。句子中的每个单词都会对其进行处理,但不应受到其他单词的影响,我需要一种访问字母的方法,例如,即使我在第三个单词处,buffer[k]如果k=0将给出第三个单词的第一个字母 void read_line (char buffer[]) { char character; int i = 0; for (i = 0; i < 32; ++i) { c

我正在寻找一种方法来迭代从C中的
getchar()
函数收集的字符串中的每个单词。我不能使用指针。句子中的每个单词都会对其进行处理,但不应受到其他单词的影响,我需要一种访问字母的方法,例如,即使我在第三个单词处,
buffer[k]
如果
k=0
将给出第三个单词的第一个字母

void read_line (char buffer[])
{
    char character;
    int i = 0;

    for (i = 0; i < 32; ++i)
    {
        character = getchar ();
        buffer[i] = character;
    }
}
void read_行(字符缓冲区[])
{
字符;
int i=0;
对于(i=0;i<32;++i)
{
character=getchar();
缓冲区[i]=字符;
}
}

没有指针有点困难(你在传递数组,这些也是指针)。但您可能根本不需要分配内存。看一看

澄清:

正如@EdS在下面的评论中指出的,数组和指针不是一回事。然而,在许多情况下,它们几乎是一样的。实际上,将数组传递给函数和将指针传递给函数几乎总是一样的


因此,请记住指针和数组是不同的,您应该了解它们之间的区别,但暂时不要担心。

您想读取一行写的字符串并计算单词,对吗

首先,使用以下命令读取字符串:

char* str = gets(NULL);
int i = 0;
char* tok = strtok(str," ");
while(tok != NULL) {
    i++;
    tok = strtok(NULL, " ");
}

您可以计算所有单词,以空格分隔。

通常您可以使用strhr在字符串中查找空格,但由于无法使用指针:

void read_line (char buffer[]) 
{ 
    char character; 
    int i = 0; 

    for (i = 0; i < 32; ++i) 
    { 
        character = getchar (); 

        if (character == '\n')
            break;

        buffer[i] = character; 
    } 

    i = 0;

    while (buffer[i] != '\n')
    {
        for (; buffer[i] != ' '; ++i)
            // each iteration of this loop will be on the same word

        ++i;
    }
} 
void read_行(字符缓冲区[])
{ 
字符;
int i=0;
对于(i=0;i<32;++i)
{ 
character=getchar();
如果(字符=='\n')
打破
缓冲区[i]=字符;
} 
i=0;
while(缓冲区[i]!='\n')
{
对于(;缓冲区[i]!='';++i)
//此循环的每次迭代都将在同一个单词上进行
++一,;
}
} 

为什么没有指针?它们是C的一个非常标准的特性:-)你认为在这个场景中,
buffer
是什么(提示;它不是数组)?“你在传递数组,它们也是指针”-我知道你的意思,但对一个明显的初学者来说,这可能是一件非常糟糕的事情。数组从来都不是指针,尽管在很多情况下(比如这一种情况下),它们确实会降级为指针。@EdS。但您在对问题的评论中提到缓冲区是指针。另外,数组是对分配为数组长度的内存块的开始的引用。这听起来很像是对我的指点。@Ben:我想你没有抓住我评论的重点。我理解zmbq使用该语句的意图(我想我无论如何都理解),因为我理解数组、指针,以及数组何时降级为指针。然而,将数组与指针混淆是初学者遇到的一个大问题,如果按照字面意思说“数组和指针是同一件事”,那么这些评论是错误的,并且具有误导性。