如何使用数组将C中的句子拆分成单词
我正在写一个程序,把文本分成几个句子。如何使用数组将C中的句子拆分成单词,c,arrays,char,C,Arrays,Char,我正在写一个程序,把文本分成几个句子。 输入: 输出: Hi, my name is John. 代码 如果您尝试运行或可以看到,则会出现错误。它不输出最后一个字 我试着把这个循环放在那里: do { if (str[i] == ' ') { printf("\n"); k=i-lenght; do { putchar(str[k]); k++; }while(str[k] != ' '); le
输入: 输出:
Hi,
my
name
is
John.
代码
如果您尝试运行或可以看到,则会出现错误。它不输出最后一个字
我试着把这个循环放在那里:
do {
if (str[i] == ' ') {
printf("\n");
k=i-lenght;
do {
putchar(str[k]);
k++;
}while(str[k] != ' ');
lenght=0;
}
lenght++;
i++;
}while(str[i+1] != '.');
但这是同一个周期。。。我还试图使功能:
void word (char *c,int index, int lenght ) {
printf ("\n");
int i = index - lenght;
do {
putchar (c[i]);
i++;
} while (c[i] != ' ');
return;
}
我将其称为do while cycle,而不是do while cycle(在代码的“if”部分):
让我吃惊的是,这个函数只“输出”句子中的第一个单词。如果第一个单词是“John”,则输出“John”“ohn”“hn”
所以这里不仅仅有一个问题
如何重新制作/修复循环/功能以输出我想要的-句子中的所有单词?
为什么它不起作用?我知道答案-因为你的循环是以字符“”结束的,而不是以“.”结束的,但是当我试图更改它时,它会在点后再输出一个随机字符
请不要因为代码而责备我,我只是想学点东西。我知道这不是杰作,我可以而且我会在完成之前把它缩短。它不打印最后一个单词的原因是,当它读取并找到“.”时,for循环终止,因此它不会处理和输出该单词 您可以更改for循环条件以查找终止的'\0',这将修复它。
\include
#include<stdio.h>
int main ()
{
char str[200];
int i = 0;
puts ("Enter text:");
gets(str);
int k, length = 0;
printf("So the words are:\n");
while(str[i]!='\0')
{
if (str[i] == ' ') {
k = i - length;
do {
putchar (str[k]);
k++;
} while (str[k] != ' ');
printf ("\n");
length = (-1);
}
else if (str[i+1] == '\0') {
k = i - length;
do {
putchar (str[k]);
k++;
} while (str[k] != '\0');
length = 0;
}
length++;
i++;
}
return 0;
}
int main()
{
char-str[200];
int i=0;
放入(“输入文本:”);
获取(str);
int k,长度=0;
printf(“因此单词是:\n”);
while(str[i]!='\0')
{
如果(str[i]=''){
k=i-长度;
做{
putchar(str[k]);
k++;
}while(str[k]!=“”);
printf(“\n”);
长度=(-1);
}
else if(str[i+1]='\0'){
k=i-长度;
做{
putchar(str[k]);
k++;
}while(str[k]!='\0');
长度=0;
}
长度++;
i++;
}
返回0;
}
请正确设置代码格式。是否有理由使用“.”而不是“\0”作为短语终止符?如果你最后没有一个“.”,这将永远不会停止。只是一个提示。@HugoSadok我试过了,但失败了。。。我将不得不使用它,我知道。。。但首先,我想找出这个问题。@StevenWalton哇,谢谢,我将看一看,将支票从“.”更改为“\0”应该可以解决它。但是如果你想一想,它还是很难看的。但我同意,考虑到代码,这可能是最简单的修复方法。它只在第一个单词中打印Frist字母。@Tehryn我指的是代码的第一个版本only@well我知道。。。当我更改它时,它会打印整个句子,但evan带有空字符,或者至少是点后面的一些随机字符。但是如果我放在那里:if(请解释你的答案
void word (char *c,int index, int lenght ) {
printf ("\n");
int i = index - lenght;
do {
putchar (c[i]);
i++;
} while (c[i] != ' ');
return;
}
for (i=0; str[i] != '.'; i++) {
if (str[i] == ' ' || str[i] == '.') {
word(str, i, lenght);
lenght = 0;
}
lenght++;
}
#include<stdio.h>
int main ()
{
char str[200];
int i = 0;
puts ("Enter text:");
gets(str);
int k, length = 0;
printf("So the words are:\n");
while(str[i]!='\0')
{
if (str[i] == ' ') {
k = i - length;
do {
putchar (str[k]);
k++;
} while (str[k] != ' ');
printf ("\n");
length = (-1);
}
else if (str[i+1] == '\0') {
k = i - length;
do {
putchar (str[k]);
k++;
} while (str[k] != '\0');
length = 0;
}
length++;
i++;
}
return 0;
}