C 如何迭代每个由空格分隔的单词?
我正在寻找一种方法来迭代从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
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使用该语句的意图(我想我无论如何都理解),因为我理解数组、指针,以及数组何时降级为指针。然而,将数组与指针混淆是初学者遇到的一个大问题,如果按照字面意思说“数组和指针是同一件事”,那么这些评论是错误的,并且具有误导性。