c - 如何使用数组将句子分成单词

标签 c arrays char

我正在尝试编写程序,该程序接受文本并将其分成句子。
输入:

Hi, my name is John.

输出:

Hi,

my

name

is

John.

代码

int main ()
{
  int str[200]; 
  int i = 0;
  puts ("Enter text. Do not forget to put dot at the end.");
  do {
    str[i] = getchar();
    i++;
  } while (str[i-1] != '.');

  printf("\n");
  int k, lenght = 0; //lenght -- the lenght of single word

  for (i=0; str[i] != '.'; i++) {
    if (str[i] == ' ' || str[i] == '.') {
    printf ("\n");
    k = i - lenght;

    do {
        putchar (str[k]);
        k++;
    } while (str[k] != ' ');
    lenght = 0;
    }

    lenght++;
  }

  printf ("\n stop");
  return 0;
}

如果您尝试运行或者可以看到,则存在错误。它不输出最后一个单词。

我试图把这个循环放在那里:

  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 循环(在代码的“if 部分”):

for (i=0; str[i] != '.'; i++) {
    if (str[i] == ' ' || str[i] == '.') {
    word(str, i, lenght);
    lenght = 0;
    }

    lenght++;
  }

令我惊讶的是,该函数仅“输出”句子中的第一个单词。如果第一个单词是“John”,则输出“John”“ohn”“hn”。

所以这不仅仅是一个问题......

如何重新制作/修复循环/函数以输出我想要的内容 - 句子中的所有单词?

为什么它不起作用?我知道答案 - 因为你的循环是以字符“”结束的,而不是以“.”结束,但是当我尝试更改它时,它在点之后再输出一个随机字符。

请不要因为代码而责怪我,我只是想学习一些东西的初学者。我知道它不是杰作,但我可以并且会在完成之前将其缩短。

最佳答案

它不打印最后一个单词的原因是,一旦它读取并找到“.”,for 循环就会终止,因此它不会处理和输出该单词。

您可以更改 for 循环条件以查找终止“\0”,这应该可以修复它。

关于c - 如何使用数组将句子分成单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32813126/

相关文章:

javascript - 数组引用以某种方式转换为值

c++ - C++ 中的 char 数组到 int

c++ - 字符串到 const char*

c - Zlib 解压缩 C 中未知压缩长度的字节

c++ - 输入10^1000范围内的整数

c++ - 16字节数据类型如何存储在64位机器上

c - 想知道如何 "reveal"一个 "hidden"字符串(格式如 ****)

arrays - 查找数组中的所有升序三元组

c - 读取c中的输入后如何清除缓冲区?

c - `sscanf` 是否保证不更改它找不到的参数?