【问题标题】:ANSI C - Count words and letters per line [closed]ANSI C - 每行计算单词和字母[关闭]
【发布时间】:2012-10-16 00:35:09
【问题描述】:

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

  • 数单词(每个单词 5 美元)
  • 计算每个单词的字母数(如果单词少于 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 美元

【问题讨论】:

  • 首先,描述在没有计算机的情况下您将如何做到这一点。深入细节,假设这个人不知道“单词”是什么。假设这个人甚至不知道如何计算一个单词中的字母数。
  • 你要研究strtok
  • 刚刚添加了更多信息 :) 谢谢
  • Ruby 工作程序:$_.split.inject(0) {|m,w| m + (w.length &lt; 4 ? 4 : 5)} while gets 问题明确地说是 C,那你为什么呢? “皮顿”真的吗? ... ....

标签: c text count ansi


【解决方案1】:

一般来说我会做什么:

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

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

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

是的,我知道我们讨厌 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 修改了您传递的原始字符串。因此,如果您想保留它以用于其他光荣的目的,请在某处保存一份安全副本。

【讨论】:

  • 嘿,非常感谢!,让我试试你的代码,然后会回到这里,如果需要的话,希望你能提供更多帮助:)
  • @Daniel 没问题,需要帮助就回来
猜你喜欢
  • 2020-10-04
  • 1970-01-01
  • 2014-01-02
  • 1970-01-01
  • 2023-02-11
  • 1970-01-01
  • 1970-01-01
  • 2011-09-15
  • 2016-10-28
相关资源
最近更新 更多