std::cin 跳过空格

2024-04-20

所以我试图编写一个函数来检查一个单词是否在句子中,通过循环遍历 char 数组并检查相同的 char 字符串。只要句子中没有任何空格,该程序就可以运行。我用谷歌搜索了一下,他们都是同样的建议;

cin.getline

但无论我如何实现它,它要么不运行,要么跳过整个输入并直接输出。

我该如何解释空间?

#include <iostream>


using namespace std;

bool isPartOf(char *, char *);

int main()
{
char* Word= new char[40];
char* Sentence= new char[200];

cout << "Please enter a word: ";
cin >> Word;
cout << endl << "Please enter a sentence: "; 

//After Word is input, the below input is skipped and a final output is given.
cin.getline(Sentence, 190); 
cout << endl;

if (isPartOf(Word, Sentence)==true)
    {
        cout << endl << "It is part of it.";
    }
else
    {
       cout << endl << "It is not part of it.";
    }
}

bool isPartOf(char* a, char* b) //This is the function that does the comparison. 
{
    int i,j,k;

for(i = 0; b[i] != '\0'; i++)
{
j = 0;

if (a[j] == b[i])
{
    k = i;
    while (a[j] == b[k])
    {

        j++;
        k++;
        return 1;
        if (a[j]=='\0')
            {
                break;
            }
        }

    }


}
return 0;
}

而且我不允许使用 strstr 进行比较。


好的,我会尝试解释你的问题:

我们假设这是您的输入:

这是这个词
这是一句话

当您使用 cin 并给它任何输入时,它会停在换行符处,在我的示例中,换行符位于“thisisaword”中的字符“d”之后。
现在,您的 getline 函数将读取每个字符,直到停止换行符。
问题是, getline 遇到的第一个字符已经是换行符,因此它立即停止。

这是怎么发生的?

我会尝试这样解释:

如果这是您给程序的输入(注意 \n 字符,将其视为单个字符):

这是这个词\n
这是一句话\n

你的 cin 函数将采取和留下什么:

\n
这是一句话\n

现在 getline 看到这个输入,并被指示获取每个字符,直到遇到换行符“\n”

\n 这是一句话\n

cin 读取输入并留下“\n”,其中 getline 包含“\n”。

为了克服这个问题:

\n 这是一句话\n

如前所述,我们不能再次使用 cin,因为它不会执行任何操作。 我们可以使用不带任何参数的 cin.ignore() 并让它从输入中删除第一个字符或使用 2x getline(第一个将获取剩余的 \n,第二个将获取带有 \n 的句子)

你也可以通过切换你的cin>>Word来避免这种问题;到 getline 函数。

由于它被标记为 C++,因此我将本示例中的 Char*[] 更改为 Strings:

string Word, Sentence;

cout << "Please enter a word: "; cin >> Word;
cout << endl << Word;

cin.ignore();

cout << "\nPlease enter a sentence: "; getline(cin, Sentence); 
cout << endl << Sentence;

OR

string Word, Sentence;

cout << "Please enter a word: "; getline(cin, Word); 
cout << endl << Word;

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

std::cin 跳过空格 的相关文章

随机推荐

  • 在 Swift 中“夹住”两个值之间的数字的标准方法

    Given let a 4 2 let b 1 3 let c 6 4 我想知道将这些值限制在给定范围内的最简单 最快捷的方法 例如0 5 这样 a gt 4 2 b gt 0 c gt 5 我知道我可以执行以下操作 let clamped
  • 无法检查 int 是否为 null

    我正在尝试使用字典 每当我想检查字典中是否存在某个元素时 我都会这样做 int value results get aKeyThatMayOrMayNotBePresent if value null 但编译器说我无法比较int to a
  • 更新命令行输出,即进度

    我希望能够在命令行上用简单的 PHP 脚本显示进度表 而不是看到 Progress 0 Progress 1 etc 我只想更改号码 并替换以前的号码 就像 git clone 所做的那样Resolving deltas 100 8522
  • 在 Django admin 中使用模型显示表

    我正在尝试创建一个项目管理类型的应用程序 现在我有了如图所示的项目模型 当我保存它时 我可以获得用户名和时间 现在 在下面的同一页面中 我想显示用户可以添加 编辑的表格 就像这张图片中一样 How can i do that 我们要创建数据
  • 在 WP7 Silverlight 应用程序中导航时将复杂对象传递到页面

    我一直在使用NavigationService s Navigate导航到我的 WP7 Silverlight 应用程序中其他页面的方法 NavigationService Navigate new Uri Somepage xaml va
  • 我可以在 AngularJS 中使用一个 ng-app 到另一个 ng-app 中吗

    我有两个 ng app 喜欢 div somexpression div some more expression div div 有什么办法让它发挥作用吗 当我制作嵌套 ng app 时它不起作用 我知道我可以使用两个不同的控制器 但我不
  • 更改django的默认静态目录

    我在 Django 1 6 中遇到了一个问题 我想更改 django 中的默认静态文件目录 我不想让它进来project myapp static but in project static 我阅读了 django 的文档 添加了 STAT
  • PHP 中避免代码注入的最佳方法

    我的网站最近遭到了攻击 在我看来 这是一个无辜的代码 那里没有 SQL 调用 所以我不担心 SQL 注入 但显然 SQL 并不是唯一的注入方式 这个网站有一个解释和一些避免代码注入的例子 http www theserverpages co
  • 无法让 netTcpBinding 请求显示在 Fiddler 中

    我有一个具有两个端点的 WCF 服务 一种使用 basicHttpBinding 另一种使用 netTcpBinding 这是我的配置
  • Ecto 模型 - select 中的子查询

    我需要使用 Ecto 进行 SQL 查询 SELECT users select count 0 from money transactions where from id users id AND created at gt 2016 1
  • Google Maps API v3:单击 DOM 元素时关闭信息窗口

    我是第一次使用 Google 地图 所以我在 CSS Tricks 上查看了一个很好的教程 http css tricks com google maps slider http css tricks com google maps sli
  • 您的 APP_BUILD_SCRIPT 指向未知文件:./jni/Android.mk

    我正在尝试让 ndk gdb 工作 但遇到一些问题 我的项目结构是这样的 trunk indiana Here is the android manifest ubravo java mbravo here is the native co
  • aws 从 lambda 调用步骤函数

    所以我设置了一个步骤函数来调用将发送电子邮件的兰巴 我已经手动测试了它并且它有效 现在我想最初使用新的 lambda 调用此步骤函数 我在网上找到了一些代码并且我已经玩过它 通过了测试并且不会引发任何错误 有谁知道我错过了什么 因为它不起作
  • plt.imshow() 和 plt.show() 没有图像弹出或显示

    我试图通过将 cocoapi 演示脚本复制粘贴到我自己的本地脚本中来重新创建它 而不是在 Jupyter 笔记本上运行它 一切工作正常 并且肯定有图像被读取并且可以显示 因为我已经使用 openCV 的 imshow 函数对其进行了测试 并
  • 更改 Mercurial“默认”父 URL

    假设我有一个 Mercurial 存储库 并且我从默认父 URL 我克隆它的源 中提取数据 现在我想更改默认的父 URL 主机名更改 或者将其复制到另一台计算机等 有没有办法做到这一点 或者我必须从新的 URL 重新克隆 您甚至可以在 hg
  • 由于 MultiReleaseException,jdeps 无法打印模块 deps

    我们有一个基于 JavaFX 的应用程序 它是not模块化 有原因 涉及遗留库 但我们使用构建自定义运行时jdeps and jlink 我们最近重写了该应用程序并添加了一些新的依赖项 并删除了其他依赖项 现在 正在构建应用程序的脚本突然停
  • EFCore 3.1 - 通过 Any 存在查询;查询无法翻译

    我们使用 EFCore 3 1 并尝试通过跨越 2 个属性的 Any 使用 Exists 构建查询 var selectionCriteria someHugeList Select sh gt new sh Id sh StatusCod
  • 改变眼睛图像中特定区域的颜色[Matlab]

    I am trying to change the pupil of the following image This is not a feature extraction or eye detection task I want to
  • 修复 iPhone/iPad/iPod 上的 CSS 悬停问题

    我想修复 iOS 上的悬停效果 更改为触摸事件 但我不知道 让我解释一下 您的页面中有一段文字 div class mm hello world div 风格 mm color 000 padding 15px mm hover backg
  • std::cin 跳过空格

    所以我试图编写一个函数来检查一个单词是否在句子中 通过循环遍历 char 数组并检查相同的 char 字符串 只要句子中没有任何空格 该程序就可以运行 我用谷歌搜索了一下 他们都是同样的建议 cin getline 但无论我如何实现它 它要