c/c++的输入

1、C语言中的输入

1、输入包含空格字符串的两种方法
A、gets():包含在头文件#include <stdio.h>,用来从标准输入设备(键盘)读取字符串直到换行符结束,但换行符会被丢弃,然后在末尾添加'\0'字符
调用格式为:gets(s);
其中s为字符串变量字符串数组名字符串指针)。
如果为单个字符指针,编译连接不会有错误,但运行后内存溢出错误

1、gets(s)函数scanf(“%s”,s) 相似,但不完全相同:
使用scanf("%s",s)函数输入字符串时存在一个问题,就是如果输入了 空格 会认为字符串结束,空格后的字符将作为下一个输入项处理
gets()函数接收输入的整个字符串直到遇到 回车换行符\n 为止

#include<stdio.h> // 输入输出头文件
//#include<stdlib.h>// 标准库头文件
int main(){
	char str[20];
	gets(str);
	printf("String:");
	puts(str);
	printf("\n结束!");
	return 0;
}

输入:
Hello world
结果:
String:Hello world

结束!

puts(字符数组):将字符数组起始地址开始的一个字符串(以'\0'结束的字符序列)输出到终端,并将 字符串结束标志'\0' 转化成 '\n' ,自动输出一个换行符。即,遇到 字符串结束符’\0’ 时结束

#include<stdio.h>
//#include<stdlib.h>
int main(){
	char c[] = "How\nare\nyou!";
    puts(c);
    printf("结束!");
	return 0;
}
结果:
How
are
you!
结束!
#include<stdio.h>
//#include<stdlib.h>
int main(){
	char c[] = "How\0are\0you!";
    puts(c);
    printf("ni");
	return 0;
}
结果:
How
ni

B、正则表达式

#include<stdio.h>
//#include<stdlib.h>
int main(){
	char str[20];
	scanf("%[^\n]",str);
	printf("String: %s\n",str);
	return 0;
}
输入:
Hello world
结果:
String:Hello world

注意:scanf(“%s”,str);不会将空格(’ ')输入进去。即遇到空格就结束

#include<stdio.h>
//#include<stdlib.h>
int main(){
	char str[20];
	scanf("%s",str);
	int n=strlen(str);
	printf("String: %s,%d\n",str,n);
	return 0;
}
输入:
Hello world
结果:
String:Hello,5

例子:分词

#include <iomanip> // 精度的头文件
int main()
{
    string s;
    getline(cin,s);
    int c1=1,c2=0;
    for(int i=0;i<s.size();i++){
        if(s[i]==' ')
            c1++;
        else
            c2++;
    }
    float n1=c1;
    float n2=c2;
    float r=n2/n1;
    //float r=(float)c2/(float)c1;
    cout<<setprecision(2)<<fixed<<r;
    return 0;
}

例子:大小写

int main()
{
    string s;
    getline(cin,s);
    for(int i=0;i<s.size();i++){
        if(s[i]=='a' || s[i]=='A') s[i]='A';
        else if(s[i]=='e'||s[i]=='E') s[i]='E';
        else if(s[i]=='i'||s[i]=='I') s[i]='I';
        else if(s[i]=='o'||s[i]=='O') s[i]='O';
        else if(s[i]=='u'||s[i]=='U') s[i]='U';
        else if('a'<=s[i] && s[i]<='z' || s[i]==' ') continue;
        else if('A'<=s[i] && s[i]<='Z') s[i]=s[i]+32;
        else{
            cout<<"输入只能包含大小写英文字母和空格"<<endl;
            return 0;
        }
    }
    cout << s;
    return 0;
}

2、 c++的输入

cin方法 在遇到空格、回车结束输入

1、输入包含空格字符串的 3种 方法
A、对于string类型的字符串:
(1)getline(cin,str)(包含在头文件#include <string> ):读入整行数据,遇到回车结束输入。若定义变量为string类型(注意不是字符型数组),则考虑 getline() 函数。

#include <iostream>
using namespace std;

int main() {
	string st;
	getline(cin,st);
	cout << st << endl;
	return 0;
}
输入:
123\n7\09 f
haha2
结果:123\n7\09 f

B、对于字符型数组:
(1)cin.get(str,n):可以接收空格,遇到回车结束输入
原型:cin.get(char *str,int maxnum)

#include <iostream>
using namespace std;
int main() {
    char st[6];
    cin.get(st,5);	// 只能输入4个字符 + 字符串结束符 \0
	cout << st << endl;
	return 0;
}
输入1123456
结果11234
输入21 \n7
结果21 \n

cin.get(字符变量名)可以用来接收字符:

#include <iostream>
using namespace std;
int main(){
    char c;
    c = cin.get();	// 接受一个字符
    cout<<c;
    return 0;
}
输入:\n667
输出:\

输入:\0667
输出:\

输入: d667
输出: 
空格

(2)cin.getline(str,n):可以同cin.get()函数类似,也可以接收空格,遇到回车结束输入
原型:cin.getline(char *str,int maxnum)

#include <iostream>
using namespace std;
int main() {
    char st[6];
    cin.getline(st,5);	// 只能输入4个字符 + 字符串结束符 \0
	cout << st << endl;
	return 0;
}
输入1123456
结果11234
输入21 \n7
结果21 \n

3、字符串转换为字符型数组

(1)c_str()

#include <iostream>
#include <cstring>	// strcpy()方法所在头文件
using namespace std;

int main() {
    char st[7];
    string str="I Love";
    strcpy(st,str.c_str());
	cout << st << endl;
	return 0;
}
结果:I Love

(2)data()

#include <iostream>
#include <cstring> // strcpy()方法所在头文件
using namespace std;

int main() {
    char st[7];
    string str="I Love";
    cout << typeid(str).name()<<endl;
    cout << typeid(st).name()<<endl;
    cout << typeid(str.c_str()).name()<<endl;
    strcpy(st,str.data());
    
	cout << st << endl;
	return 0;
}
结果:
NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
A7_c
PKc
I Love
  • 6
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值