C++字符&字符串(字符数组)的输入输出

文章目录

一、字符串(字符数组)

在C语言和C++中字符串的区别

  • C语言中字符串是通过字符数组来实现的。
  • 在C++中除了通过字符数组来实现,还可以通过string类型来实现。

字符串的规则:

  • 字符串是以’\0’结尾的一串字符。
  • 字符数组只能在定义并初始化的时候给字符数组赋初值。
  • 字符数组之间,不能够直接相互赋值。只能通过每个元素赋值的方式进行。

二、字符的输入

1. cin >> ch;

这个是最基本的输入方式。但是cin>>ch;无法读入空格、回车等。
以Ctrl + z 结束输入。

// 不能读入空格、回车等
#include <iostream>
using namespace std;

int main(){
    char ch;
    while (cin >> ch){
        cout << ch;
    }
    
    return 0;
}
// 在循环中,cin从输入缓冲区中一个一个字符读入。
输入:abc def xyz
输出:abcdefxyz

2. cin.get(ch);

这种输入方法,可以读入空格、回车等。
以Ctrl + z 结束输入。

#include <iostream>
using namespace std;
int main(){
    char ch;
    while (cin.get(ch)){
        cout << ch;
    }
    return 0;
}

输入:abc def xyz
输出:abc def xyz

3. ch = cin.get();

这种输入方法与cin.get(ch)相似,可以读入空格、回车等。
以Ctrl + z 结束输入。

#include <iostream>
using namespace std;
int main(){
    char ch;
    while (ch = cin.get() != EOF){
        cout << ch;
    }
    return 0;
}

输入:abc def xyz
输出:abc def xyz

4. ch = getchar();

这种输入方法与cin.get(ch)相似,可以读入空格、回车等。
也可以读入Ctrl + z 。

#include <iostream>
using namespace std;

int main(){
    char ch;
    while (ch = getchar()){
        cout << ch;
    }

    return 0;
}
输入:abc def xyz
输出:abc def xyz

三、字符串的输入

1. cin >> ch;

这个是最基本的输入方式。但是cin>>ch;无法读入空格、回车等,遇到空格、回车会结束读取。

#include <iostream>
using namespace std;

int main(){
    char ch[20];
    cin >> ch;
    cout << ch;

    return 0;
}
输入:abc def xyz
输出:abc

2. cin.get(ch, 20, ‘\n’);

可以读入空格、回车等。
三个参数分别是数组名、读入长度(20-1)、终止字符。终止字符默认为’\n’。
如果在读取(20-1)个字符之前,遇到终止字符,则提前结束读取。

#include <iostream>
using namespace std;

int main(){
    char ch[20];
    cin.get(ch, 20, 'f');   // 读入长度为19
    cout << ch;

    return 0;
}
输入:abc def xyz
输出:abc de

3. cin.getline(ch, 20, ‘\n’);

可以读入空格、回车等。
cin.getline(ch, 20, ‘\n’)参数与cin.get(ch, 20, ‘\n’)含义相同。
cin.getline() 与 cin.get()的区别
cin.getline()遇到终止字符时结束,缓冲区指针移到终止字符之后。
cin.get()遇到终止字符时,停止读取,缓冲区指针不移动。
当终止字符为’\n’时,cin.getline()会更好,可以防止下次读入时读入换行符。


#include <iostream>
using namespace std;

int main(){
    char ch[20];
    char str[20];
    cout << "cin.getline()的输入:" << endl;
    cin.getline(ch, 20, 'f');
    cout << "cin.getline()的读入输出:" << endl;
    cout << ch;
    cin.getline(str, 20, '\n');
    cout << str;
    cout << endl;

    char ch2[20];
    char str2[20];
    cout << "cin.get()的输入:" << endl;
    cin.get(ch2, 20, 'f');
    cout << "cin.get()的读入输出:" << endl;
    cout << ch2;
    cin.get(str2, 20, '\n');
    cout << str2;
    cout << endl;

    return 0;
}
// cin.getline()再次读入的时候,漏掉了终止字符'f'。
两次输入相同:abc def xyz
cin.getline()的输出:abc de xyz
cin.get()的输出:abc def xyz

四、字符数组的输出

// 下面两种方式都可以给字符数组初始化
// 直接用字符串初始化时,会自动在字符串后面加上'\0'
// 传统数组初始化时,没有被初始化的成员默认为'\0'
char ch[10] = "Hello";  // 直接用字符串初始化
char ch[10] = {'H', 'e', 'l', 'l', 'o'};    // 传统数组初始化

// 直接cout字符数组名,就可以输出字符数组
// 这里的cout会输出第一个'\0'之前的内容
// 如果字符数组中没有存储'\0',则会输出其他内容,直到遇到'\0'为止。
cout << ch;

五、cin.get()的三种作用

1. 读入字符cin.get(ch)

这种输入方法,可以读入空格、回车等。
以Ctrl + z 结束输入。

#include <iostream>
using namespace std;
int main(){
    char ch;
    while (cin.get(ch)){
        cout << ch;
    }
    return 0;
}

输入:abc def xyz
输出:abc def xyz

2. 读入字符串cin.get(ch, 20, ‘\n’)

可以读入空格、回车等。
三个参数分别是数组名、读入长度(20-1)、终止字符。终止字符默认为’\n’。
如果在读取(20-1)个字符之前,遇到终止字符,则提前结束读取。

#include <iostream>
using namespace std;

int main(){
    char ch[20];
    cin.get(ch, 20, 'f');   // 读入长度为19
    cout << ch;

    return 0;
}
输入:abc def xyz
输出:abc de

3. cin.get();

cin.get(无参数)没有参数主要是用于舍弃输入流中的不需要的字符,或者舍弃回车。

    原文作者:PhoenixShine
    原文地址: https://blog.csdn.net/Buster001/article/details/100083803
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞