输入带有两个句号的字符串

Posted

技术标签:

【中文标题】输入带有两个句号的字符串【英文标题】:Inputting String with two fullstops 【发布时间】:2018-04-29 10:16:34 【问题描述】:

我需要输入一个带有两个句号的字符串,但是这段代码输入了最后一个句号。 当输入是:“头脑就是一切。你认为你会成为什么。”后跟回车键和“坐下”

程序在tem 中存储:“思想就是一切。你认为你会成为什么”,它错过了最后一个句号,而是将句号存储在pas

#include <iostream>
#include <string>
#include <stdlib.h> 
using namespace std;
int main()
  char tem[50];
  String pas=""

  cin.get(tem,50);
  cin>>pas;
  cout<<tem<<endl;

【问题讨论】:

two fullstops: 你的意思是空字符\0 (0x00)? @Stefan: "Full stop" 是英国/英联邦的标点符号,在北美英语中称为“句点”,即.(ASCII 序数0x2e)。他的示例输入有两个句点,一个在每个句子的末尾,但是第二个句子的句点被删除了。 【参考方案1】:

您分配的缓冲区大小为 50 个字符长,您输入的字符串也是 50 个字符长,但 cin.get 需要 1 个字符来终止 0,因此它会占用您的时间。使缓冲区 51 变长并读取 51 个字符。

#include <iostream>

int main()

    char tem[51];
    std::cin.get(tem, 51);
    std::cout << tem << std::endl;

如果您改用std::string,则无需担心您的输入不适合您的缓冲区:

#include <iostream>
#include <string>

int main()

    std::string tem;
    std::getline(std::cin, tem);
    std::cout << tem << std::endl;

【讨论】:

虽然我不知道为什么没有人将 tem 声明为 string tem; @TanveerBadar:我认为周围有很多旧书;-) @TanveerBadar 确实【参考方案2】:

这个字符串的长度“头脑就是一切。你认为你会成为什么。”是 50 并且数组 tem 的大小也是 50 .cin 在字符串末尾需要空终止符(“\0”)。这就是它不打印第二个句号的原因。

#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;

int main()
    char tem[51];
    string pas="";
    cin.get(tem,51);
    cout<<tem<<endl;
    return 0;

【讨论】:

避免添加这样的照片。没视力的朋友看不懂。

以上是关于输入带有两个句号的字符串的主要内容,如果未能解决你的问题,请参考以下文章

为啥要一个句号,“。”而不是加号“+”,用于 PHP 中的字符串连接?

JAVA中赋值时有双引号与没有双引号有啥区别

如何从亚马逊红移中的字符串中删除非数字字符(句号“。”除外)

dplyr 句号字符“。”是啥意思?参考?

java怎么以空格,英文逗号和句号拆分一个字符串,一个逗号我会,同时三个该怎么写

蓝桥杯java 算法提高 统计单词数