ANSI C - 统计每行的单词和字母数

3

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

  • 计算单词数量(每个单词花费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 美元... "sit" 有 3 个字母,所以让我们再加上 $4 美元... "ameth" 有 5 个字母,所以再加上 $5 美元。

这段文本的成本为:$24 美元


2
首先,描述一下如果没有计算机你会如何做到这一点。详细说明,假设对方不知道什么是“单词”。假设对方甚至不知道如何计算一个单词中字母的数量。 - Raymond Chen
你需要研究 strtok - im so confused
刚刚添加了更多信息 :) 谢谢 - Daniel
1
Ruby 工作程序:$_.split.inject(0) {|m,w| m + (w.length < 4 ? 4 : 5)} while gets,问题明确说了是 C,那你为什么要用 Python?…… - yeyo
1个回答

5

一般而言,我会这样做:

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

  2. 使用 string.hstrtok() 将输入分词。查一下资料,它基本上使用由你提供的分隔符将输入字符串(可能是 txt)拆分为所需的标记(例如,分隔符 =“空格”会将输入拆分成每个“简单”单词,其中空格是新单词的唯一标志)。通常在循环中调用 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;
}

令人感到奇怪的标记语法之所以看起来有些奇怪,是因为:

STRTOK函数的描述以及其语法的解释

警告:从链接中可以明显看出,strtok会修改您传递给它的原始字符串。因此,如果您想将其保留用于其他用途,请在安全的位置存储它的副本。

嘿,非常感谢!让我试试你的代码,然后再回来这里。如果需要的话,希望你能再多帮助一点 :) - Daniel
@Daniel 没问题,如果需要帮助可以随时回来。 - im so confused

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接