如何使用数组

时间:2015-09-27 21:38:53

标签: 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"它输出"约翰" " OHN" " HN"

所以不只有一个问题......

如何重新制作/修复周期/功能以输出我想要的内容 - 句子中的所有单词?

为什么它不起作用?我知道答案 - beacouse你的周期是建立在角色上的结束' ',但不是'。',但当我尝试更改它时,它会在点后输出一个随机字符。

请不要责怪我的代码,我只是想尝试学习一些东西。我知道它不是杰作而且我可以在完成之前缩短它。

2 个答案:

答案 0 :(得分:1)

它没有打印最后一个单词的原因是,只要它读取并找到'。',for循环终止,所以它不会处理输出那个词。

您可以更改for循环条件以查找终止' \ 0'相反,那应该解决它。

答案 1 :(得分:0)

#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;
}