c++字符串输入方式scanf + gets + getchar + cin + getline对比

本文深入探讨了C++中各种输入方法的特点与应用场景,包括scanf、getline、cin、sscanf等,对比它们处理空格、逗号分隔值及字符串复制的效能。通过实例展示如何读取包含空格的字符串,解析逗号间隔的数据,以及实现字符串到整数的转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

只是换成了markdown,防止质疑原创,帖个之前这篇文章的后台数据
在这里插入图片描述
提醒一句:
平台不同,编译器不同。
CB编译的c++采用的头文件是,而VC++ 引用的头文件是,以下程序采用CB编写。
但是现在C++11统一头文件之后貌似这个问题不大。

scanf 遇空格终止

#include <bits/stdc++.h>
#define N 101010
using namespace std;
int main(){
    char s[N],b[N];
    cout<<"请输入字符串:\n";
    while(~scanf("%s",s)){
        int i = 0;
        while((b[i] = s[i])!='\0') i++;
        cout<<"字符串复制如下:\n";
        puts(b);
        cout<<"请输入字符串:\n";
    }
    return 0;
}

样例:输入中有空格,自动划分成了两个字符串
在这里插入图片描述

getline

#include <bits/stdc++.h>
#define N 101010
using namespace std;
int main()
{
    //char s[N],b[N];
    string s,b;
    cout<<"请输入字符串:\n";
    while(getline(cin,s)){
        b = s;
        cout<<"字符串复制如下:\n";
       // puts(b);
        cout<<b<<endl;
        cout<<"请输入字符串:\n";
    }
    return 0;
}

样例:可以读入空格,以’\n’结束
在这里插入图片描述
用逗号间隔,输入字符串

#include <bits/stdc++.h>
#define N 101010
using namespace std;
int main()
{
    string s;
    cout<<"请输入字符串:\n";
    cin>>s;
    stringstream input(s);
    int k = 0, a[N];
    while(getline(input, s, ',')){ // 逗号间隔输出
        a[k] = stoi(s);
        k += 1;
    }
    cout<<"转化为整数输出:\n";
    for(int i = 0;i < k;i++)
        cout<<a[i]<<endl;    
    return 0;
}

在这里插入图片描述

gets 包括空格,遇’\n’终止

#include <bits/stdc++.h>
#define N 101010
using namespace std;
int main()
{
    char s[N],b[N];
    cout<<"请输入字符串:\n";
    while(gets(s))    {
        int i = 0;
        while((b[i] = s[i])!='\0') i++;
        cout<<"字符串复制如下:\n";
        puts(b);
        cout<<"请输入字符串:\n";
    }
    return 0;
}

样例: 可读入空格
在这里插入图片描述

getchar() 终止条件自己定,在终止之前可读入所有的操作

#include <bits/stdc++.h>
#define N 101010
using namespace std;
int main()
{
    char s[N],b[N];
    int i =  0;
    cout<<"请输入字符串:\n";
    while((s[i] = getchar())!='\n')///模仿getline
    {
        b[i] = s[i];
        i++;
    }
    cout<<"字符串复制如下:\n";
        puts(b);
    return 0;
}

样例:按回车之前,可以保存所有的输入
在这里插入图片描述

sscanf 暂时参考 https://www.cnblogs.com/lanjianhappy/p/6861728.html

cin 类似于scanf

但是有这么一种用法,输入可变长数组,以回车结束输入。

#include <bits/stdc++.h>
#define N 101010
using namespace std;
int main(){
    int n;
    int p[N];
    int i = 0;
    cout<<"开始输入字符:\n";
    while(1){
        cin>>n;
        p[i] = n;
        i += 1;
        char s = cin.get(); // 用s来接收是不是按了回车
        if(s == '\n'){
            break;
        }
    }
    cout<<"输出结果为:\n";
    for(int j = 0 ;j < i;j++)
        cout<<p[j]<<" ";
    cout<<endl;
    return 0;
}

样例:输出未知长度数组,以回车结束输入。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值