计算字符串中的单词数

2023-12-08

我正在自学C++。我编写了这个程序来计算字符串中的单词数。我知道这不是最好的方法,但这是我能想到的。

我正在使用空格来计算单词数。问题就在这里。

countWords("");   // ok, 'x.empty()' identifies it as an empty string.
countWords("  "); // 'x.empty()' fails, function returns 1.

p.s 我希望这个程序不计算“!”、“?”等符号。作为言语。这是我的代码:

#include <iostream>
#include <string>

int countWords(std::string x);

int main() {
    std::cout << countWords("Hello world!");
}

int countWords(std::string x) {
    if(x.empty()) return 0; // if the string is empty
    int Num = 1;              

    for(unsigned int i = 0; i < x.size(); i++) {
        // if there is a space in the start
        if(x[0] == ' ') continue;

        // second condition makes sure that i don't count 2 spaces as 2 words
        else if(x[i] == ' ' && x[i - 1] != ' ') Num++;
    }
    return Num;
}

你的功能可以简化为:

int countWords(std::string x) {

    int Num = 0;      
    char prev = ' ';

    for(unsigned int i = 0; i < x.size(); i++) {

        if(x[i] != ' ' && prev == ' ') Num++;

        prev = x[i];
    }
    return Num;
}

这里有一个demo

编辑:跟进评论:

这是替换其他字符的简单方法' ',认为可能有一个构建方法:

void replace(std::string &s, char replacer, std::set<char> &replacies)
{
    for (int i=0; i < s.size(); i++)
        if (replacies.count(s[i])) s[i] = replacer;

}

demo

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算字符串中的单词数 的相关文章

随机推荐

  • System.IO.FileSystemWatcher 的底层是如何工作的?

    我想了解 System IO FileSystemWatcher 在幕后是如何工作的 因为我有一个要求 我需要查看 100 个或更多文件夹下的所有文件 其中每个文件夹将包含大约 1K 个文件 我不确定我是否使用 FileSystemwatc
  • HiveUDF + saxon 9.1.0.8 + Java8 = 未能创建 XPathFactory

    我的 Spark 作业使用 HiveContext 和 Saxon 工作正常 除非代码中没有定义 UDF 在 UDF 实现的情况下 HiveContext 初始化失败并出现错误 我听说 saxon 9 5 1 5 中解决了 saxon ja
  • 解析器组合器:如何终止关键字重复

    我试图弄清楚如何使用关键字终止单词的重复 一个例子 class CAQueryLanguage extends JavaTokenParsers def expression START words END x gt println exp
  • CDI 扩展 - 在 ProcessAnnotatedType 阶段添加拦截器

    我正在尝试以编程方式添加拦截器 该拦截器称为 LogginInterceptor 仅记录其运行的方法的名称 当在方法上使用注释 Interceptors LogginInterceptor class 时 一切正常 然而 我正在尝试创建 C
  • 在运行时动态选择一个类

    我试图提出一个解决方案 在运行时根据消息类型选择处理 消息 的类 我知道我可以使用这样的东西 if msg type A MsgAProcessor execute message else if msg type B MsgBProces
  • IntelliJ IDEA 2016.3.4:构建过程异常终止

    我在 Intellij IDEA 中构建新的 java 项目时遇到错误 错误 构建过程异常终止 C Program Files Java jdk1 8 0 121 bin java Xmx700m Djava awt headless tr
  • 如何在 .NET SslStream 中为客户端身份验证指定接受的证书

    我正在尝试使用 Net System Security SslStream 类来处理具有客户端身份验证的 SSL TLS 流的服务器端 为了执行握手 我使用以下代码 SslStream sslStream new SslStream inn
  • 如何在 bash 中格式化数字,可能使用 printf ?

    这个如此简单的脚本失败了 bin bash n 1 printf v fn 05d n echo fn with 3 printf Illegal option v 为什么 Ubuntu 14 04 根据 Joe 这似乎是重复的以 scri
  • 为什么自定义函数引用一直指向旧函数

    我在 javascript设计模式 中找到了这个示例 并与以下代码的行为混淆 此代码创建一个自定义函数 var scareMe function alert Boo scareMe function alert Double boo 现在我
  • 使用
  • 而不包含
  • Closed 这个问题需要多问focused 目前不接受答案 插入有什么危险 li li 进入页面而不将项目包含在 ul 堵塞 例如 div style border solid 1px red li Item li li Another
  • 使用 Jenkins 执行 NUnit

    早上好 我想配置 Jenkins 服务器以使用插件运行 NUnitJenkins NUnit 插件但我尝试了很多东西但不起作用 我单击按钮 添加构建步骤 gt gt 执行Windows批处理命令但我在这里看到了http stackoverf
  • 我可以向现有静态类添加扩展方法吗?

    我很喜欢 C 中的扩展方法 但在向静态类添加扩展方法方面还没有取得任何成功 例如Console 例如 如果我想添加一个扩展Console 称为 WriteBlueLine 这样我就可以去 Console WriteBlueLine This
  • 在多行插入中使用 LAST_INSERT_ID()

    是否可以在插入查询中使用 LAST INSERT ID INSERT INTO mytable col1 col2 VALUES val1 null val2 LAST INSERT ID 尝试上面的 LAST INSERT ID 返回 0
  • 在表格边框上获取 Flutter DataTable 边框半径时出现问题

    我有一个DataTable我想添加一个边框半径 阅读完此内容后 我添加了DataTable to a Container小部件 当我不向标题添加背景颜色时 它效果很好 执行此操作时 整个表格的颜色都会改变 Container decorat
  • Python:通过套接字发送的消息大小

    我正在尝试使用发送消息socket图书馆 由于消息的大小是可变的 因此我决定在字符串的开头附加消息的大小 然后发送它 例如 如果消息是 Hello World 这是 13 个字符长 我已经计算过 EOL 我会发送类似的内容 sizeof13
  • 如何区分线条的各个部分?

    我有两个文件想要比较 这些行有时间戳 可能还有一些我想在匹配算法中忽略的其他内容 但如果匹配算法发现文本的其余部分存在差异 我仍然希望输出这些项目 例如 1c1 lt junit4 2013 01 11 04 43 57 392 INFO
  • 如何从字符串中删除最后一个字符

    这可能是一个简单的任务 但我是 PHP 新手 我正在创建一串从数据库获取的值以用于特定目的 如何从字符串中删除最后一个字符 str foreach dataarray as value str value 它给了我类似的字符串ABC DEF
  • Jaas - 请求可更新的 Kerberos 票证

    我有一个 Java API 它与 Kerberos 服务器通信并执行各种操作 截至目前 我的 API 向 Kerberos 服务器请求不可更新的票证 据我了解 jaas 配置文件有一个选项可以将 renewTGT 选项设置为 true 以便
  • OpenCV (C++) - 设置像素的 HSV 值

    我有一个 RGB 图像 已转换为 HSV 我的目标是将每个不满足特定色调值 100 的像素设置为黑色 所以 H S V 0 我有这个代码 frame3是HSV Mat图像 色调 100 for int i 0 i
  • 计算字符串中的单词数

    我正在自学C 我编写了这个程序来计算字符串中的单词数 我知道这不是最好的方法 但这是我能想到的 我正在使用空格来计算单词数 问题就在这里 countWords ok x empty identifies it as an empty str