ANSI C - 每行计算单词和字母

时间:2012-10-25 18:44:09

标签: c text count ansi

我正在开展个人项目,但我不知道该怎么做:

  • 计算单词(每个单词花费$ 5 usd)
  • 计算每个单词的字母数(如果单词少于4个字母需要4美元,如果超过4个字母需要5美元)

到目前为止,这是我的代码:

char txt[50];

printf("Introduce a text: ");
scanf("%s",&txt);
for(i=1; i <= N; i++){
  fgets(txt,50,stdin);
}

预期输出的示例:

The cost is: $24 USD

我不知道接下来会有什么帮助,谢谢。

更多解释

假设用户介绍了一个文字:

Lorem ipsum dolor sit ameth

所以程序会查看每个单词,例如“Lorem”它有5个字母,它会花费5美元这个单词。现在“ipsum”也有5个字母,所以另外5美元......“dolor”有5,所以其他5美元......“坐”有3个字母,所以我们总结另外4美元...“ameth”有5个,所以再多5美元......

此文本的费用为:24美元

1 个答案:

答案 0 :(得分:5)

我会做一般性的事情:

  1. 加载文本 - 除了错误处理/输入验证/溢出之外,您还有正确的想法。

  2. 使用strtok()中的string.h将输入标记为单词。查找它,但它基本上使用你提供的分隔符将你的输入字符串(可能是txt)分成所需的标记(例如 - delimiter =“space”会将输入分成每个“简单” “空间是新词唯一分界的词”。它在每次迭代时的输出(通常在循环中调用strtok)是下一个标记或“单词”。

  3. strlen生成的每个结果cstring使用strtok来计算每个“字”的大小

  4. 是的,我知道我们讨厌cplusplus.com,但这个例子在初看时似乎没问题(确认 - 工作):

    /* strtok example */
    #include <stdio.h>
    #include <string.h>
    
    int main ()
    {
      char str[] ="- This, a sample string.";
      char * pch;
      printf ("Splitting string \"%s\" into tokens:\n",str);
      pch = strtok (str," ,.-");
      while (pch != NULL)
      {
        printf ("%s\n",pch);
        pch = strtok (NULL, " ,.-");
      }
      return 0;
    }
    

    令牌化语法看起来有点奇怪的原因是:

    Description of STRTOK function and explanation of its syntax

    警告:从链接中可以看出,strtok修改了传递它的原始字符串。因此,如果你想保留它用于其他一些光荣的目的,请在某处保存一份安全的副本。