输入带有两个句号的字符串
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 中的字符串连接?
如何从亚马逊红移中的字符串中删除非数字字符(句号“。”除外)