C/C++ 中输入字符串的几种方式

C/C++ 中输入字符串的几种方式:

scanf,cin,getline,getchar,cin.get,cin.getline

C/C++ 中字符串大致是以下两种:

  1. char a[n] 字符数组类型

  1. string 字符串类型

1.scanf

scanf 只能接收一个字符数组,遇 “空格”“回车”都结束

#include <iostream>
using namespace std;

int main() {
    char s[10];
    scanf("%s", s);
    cout << s;
    return 0;
}

输入:ab c 遇到空格结束
输出:ab

输入:ab[回车]c
输出:ab

2.cin

cin 最常用、最基本的用法,遇 “空格”“回车”都结束

示例一:接收字符数组

#include <iostream>
using namespace std;

int main() {
    char s[10];
    cin >> s;
    cout << s;
    return 0;
}

输入:ab c 遇到空格结束
输出:ab

输入:ab[回车]c
输出:ab

示例二:接收string字符串

#include <iostream>
using namespace std;

int main() {
    string s;
    cin >> s;
    cout << s;
    return 0;
}

输入:ab c 遇到空格结束
输出:ab

输入:ab[回车]c
输出:ab

3.getline

getline 接收一个string字符串,可以接收空格并输出,需包含“#include<string>”头文件

#include <iostream>
#include <string>
using namespace std;

int main() {
    string s;
    getline(cin, s);
    cout << s;
    return 0;
}

输入:ab c 可以接收空格并输出
输出:ab

输入:ab[回车]c
输出:ab

和cin.getline()类似,但是cin.getline()属于istream流,而getline()属于string流,是不一样的两个函数

4.getchar

getchar() :接收一个字符,需包含 “#include<string>” 头文件

#include <iostream>
#include <string>
using namespace std;

int main () {
    char ch;
    ch = getchar(); //不能写成getchar(ch);
    cout << ch << endl;
    return 0;
}

输入:abcabc
输出:a

5.cin.get

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

#include <iostream>
using namespace std;

int main () {
    char ch;
    ch = cin.get(); //或者cin.get(ch);只能获取一个字符
    cout << ch << endl;
}

输入:abc
输出:a

用法二:cin.get(字符数组名,接收字符数)用来接收一行字符串,可以接收空格

#include <iostream>
using namespace std;

int main () {
    char a[20];
    cin.get(a,20); //有些类似getline。可以输入多个单词,中间空格隔开。
    cout<<a<<endl;
}

输入:abc abc abc
输出:abc abc abc

输入:abcdeabcdeabcdeabcdeabcde (输入25个字符)
输出:abcdeabcdeabcdeabcd (接收19个字符+1个'\0')

用法三:cin.get(无参数)没有参数主要是用于舍弃输入流中的不需要的字符, 或者舍弃回车, 弥补cin.get(字符数组名,接收字符数目)的不足

#include <iostream>
using namespace std;
 
int main() {
    char arr[10];
    cin.get(arr,10);
    cin.get();//用于吃掉回车,相当于getchar();
    cout << arr << endl;
    cin.get(arr,5);
    cout << arr << endl;
    return 0;
}
 
输入:abcdefghi
输出:abcdefghi
输入:abcde
输出:abcd
请按任意键继续


#include <iostream>
using namespace std;
 
int main() {
    char arr[10];
    cin.get(arr,10);
    //cin.get();//用于吃掉回车,相当于getchar(); 现在把这行注释掉试试看
    cout << arr << endl;
    cin.get(arr,5);
    cout << arr << endl;
    return 0;
}
 
输入:abcdefghi
输出:abcdefghi
请按任意键继续

6.cin.getline

cin.getline(): 接收一个字符串,可以接收空格并输出

#include <iostream>
using namespace std;

int main () {
    char a[20];
    cin.getline(a,5); //与上面基本相同。
    cout << a << endl;
    return 0;
}

输入:jkljkljkl
输出:jklj

接受5个字符到a中,其中最后一个为'\0',所以只看到4个字符输出

7.gets

在提交问题时,不少接收字符串的时候可以用gets函数(以前确实可以),但由于get函数不提供给出足够长的输入字符串时,避免目标数组缓冲区溢出的手段。 
std::gets 于 C++11 被弃用,并于 C++14 移除。

可使用 std::fgets 替代。也就是说现在只要用C++11及以后版本的标准,gets函数都不能再用了


不过,我们可以使用
#define gets(S) fgets(S,sizeof(S),stdin) 作为兼容性宏替换。

版权声明:本文为博主作者:.lby.原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/m0_64604482/article/details/129249732

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2024年4月22日
下一篇 2024年4月22日

相关推荐