C/C++键盘输入含空格的字符串的各种方法

一些前置知识

字符串有两种形式。一种是C语言风格的C字符串,C字符串是以字符 ‘\0’ 结尾的字符数组;一种是C++中的string类,声明在<string>中。
C语言的IO函数声明在<stdio.h>(在C++环境下也可写作 <cstdio>)中。有scanf、printf;gets/fgets、gets。
C++的输入函数声明在<iostream>中。有cin、cout;cin.getline();cin.get();getline()。

C语言的IO函数输入、输出字符串

scanf和printf

首先看一下两个函数的声明。

int scanf ( const char * format, ... );
int printf ( const char * format, ... );

scanf遇见空格、制表符、换行符就会分割字符串,所以它无法输入带有空格的字符串。

#include <cstdio>

int main() {
	chat str[20];
	scanf("%s", str); // input: c and cpp
	printf("%s\n", str); // output: c
	
	return 0;
}

gets、fgets和puts

C语言如何获得带有空格的字符串呢?
使用gets获得一个带有空格的句子。gets在遇到换行符或文件结尾时停止读取输入。

char * gets ( char * str );
char * fgets ( char * str, int num, FILE * stream );
int puts ( const char * str );

gets会产生一个警告,可以用fgets函数替代gets。
gets会产生一个警告,可以用fgets函数替代gets。

#include <cstdio>

int main() {
	char str[20];
	gets(str);
	//fgets(str, 20, stdin); // If the length of input string is greater than 20,
							 //it can only store first 19 characters in str. 
	puts(str);

	return 0;
}

C++的IO函数输入、输出字符串

cin和cout

cin与scanf一样也是遇见空格、制表符、换行符就会分割字符串,所以它无法输入带有空格的字符串。

#include <iostream>
using namespace std;

int main() {
	chat str[20];
	cin>>str; // input: c and cpp
	cout<<str; // output: c
	
	return 0;
}

cin.getline()、cin.get()

cin.getline()与cin.get()都能接收输入的带有空格的字符串直到遇到换行符停止接收。
但是二者稍有区别:cin.getline()丢弃换行符,而cin.get()将其保留在输入队列中。

下面两段代码通过cin.get()与cin.getline()不同的调用顺序做一个对比,可以看出cin.getline()与cin.get()的区别。
在第一段代码中,cin.get()将其保留在输入队列中,cin.getline()会先捕获上次输入的最后的换行符,捕获后cin.getline()结束,终端也不会继续让用户输入。

#include <iostream>
using namespace std;

int main() {
	char str[20];
	cout<<"Enter a string by cin.get():";
	cin.get(str, 20); // input: C and C++
	cout<<"received by cin.get():"<<str<<endl;

	cout<<"Enter a string by cin.getline():";
	cin.getline(str, 20);
	cout<<"received by cin.getline():"<<str<<endl;

	return 0;
}

运行结果如下:
先调用cin.get()后调用cin.getline()的运行结果
在第二段代码中,cin.getline()丢弃输入的最后的换行符,cin.get()则可仍然接收用户输入。

#include <iostream>
using namespace std;

int main() {
	char str[20];
	cout<<"Enter a string by cin.get():";
	cin.getline(str, 20); // input: C and C++
	cout<<"received by cin.get():"<<str<<endl;

	cout<<"Enter a string by cin.getline():";
	cin.get(str, 20); // input: C and C++
	cout<<"received by cin.getline():"<<str<<endl;

	return 0;
}

运行结果如下:
先调用cin.getline()后调用cin.get()的运行结果

留在输入队列中换行符的处理方法

可以调用一次cin.get()去吸收换行符

#include <iostream>
using namespace std;

int main() {
	char str[20];
	cout<<"Enter a string by cin.get():";
	cin.get(str, 20); // input: C and C++
	cout<<"received by cin.get():"<<str<<endl;
	cin.get();

	cout<<"Enter a string by cin.getline():";
	cin.getline(str, 20);
	cout<<"received by cin.getline():"<<str<<endl;

	return 0;
}

运行结果如下:
cin.get()吸收换行符是有效的

getline()接收string类对象

前面介绍的几种函数都是处理C风格字符串的,注意:getline()与cin.getline()不是一个函数。

#include <iostream>
using namespace std;

int main ()
{
	string str;
	getline(cin,str); // input: c and cpp
	cout<<str; // output: c

  return 0;
}
  • 10
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用循环遍历字符串,如果遇到空格则跳过,否则将字符加入到新的字符串中。 例如: ```c #include <stdio.h> int main() { char str[100], new_str[100]; int i, j = 0; printf("请输入字符串:"); scanf("%[^\n]", str); // 读取一行字符串,遇到换行符结束 for (i = 0; str[i] != '\0'; i++) { if (str[i] != ' ') { new_str[j] = str[i]; j++; } } new_str[j] = '\0'; // 添加字符串结尾标志 printf("删除空格后的字符串为:%s\n", new_str); return 0; } ``` 输入: ``` 请输入字符串:Hello world! ``` 输出: ``` 删除空格后的字符串为:Helloworld! ``` ### 回答2: 要删除字符串中的所有空格,可以按照以下步骤进行操作。 首先,从键盘输入一个字符串,可以使用input函数来实现。例如,我们可以使用以下代码来实现输入操作: ``` string = input("请输入字符串:") ``` 接下来,我们使用replace函数将字符串中的空格替换为空字符。replace函数可以将一个指定的字符或字符串替换为另一个字符或字符串。在这个例子中,我们需要将空格替换为空字符,所以我们将空格作为第一个参数,空字符作为第二个参数。代码如下所示: ``` string = string.replace(" ", "") ``` 最后,我们可以输出修改后的字符串,以便查看结果。使用print函数来实现这一点。代码如下所示: ``` print("删除空格后的字符串为:", string) ``` 综上所述,我们可以将上述代码组合在一起,如下所示: ``` string = input("请输入字符串:") string = string.replace(" ", "") print("删除空格后的字符串为:", string) ``` 这样,我们就可以从键盘输入一个字符串,并删除其中的所有空格。输出的结果是删除空格后的字符串。 ### 回答3: 要删除字符串中的所有空格,可以使用以下方法: 1. 获取用户输入字符串: ``` input_str = input("请输入一个字符串:") ``` 2. 使用字符串的 `replace()` 方法将所有空格替换为空字符: ``` new_str = input_str.replace(" ", "") ``` 3. 输出删除空格后的新字符串: ``` print("删除空格后的字符串为:", new_str) ``` 完整代码如下: ``` input_str = input("请输入一个字符串:") new_str = input_str.replace(" ", "") print("删除空格后的字符串为:", new_str) ``` 用户输入字符串中的所有空格都会被替换为空字符,并输出删除空格后的新字符串

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值