c++输入带空格字符串

513次阅读
没有评论

这里先说下第一个坑,c++ 中通常是使用 cin 进行数据的输入,但是 cin 会默认以空格、TAB、换行符'\n',作为输入结束,所以使用 cin 是不能输入带空格的字符串的。下面将介绍c++中的输入带空格数据的几种常见方式:

1、对于字符数组

chat arr[100];

1、方法1:cin.getline(arr, length)

  • arr 是定义的字符数组
  • length 是要读取 length-1 个字符到 arr 中

具体:getline 读取整行数据,以换行符\n 作为输入的结束符号。但是不保存换行符

2、方法2:cin.get(arr, length)

  • arr 是定义的字符数组
  • length 是要读取 length-1 个字符到 arr 中

具体:也是读取整行数据,也是以\n作为结束符,但是会保留换行符

#include<iostream>
using namespace std;
int main(){
    char arr[10]={0};  // 数组初始化为0
    string st;
    cin.getline(arr, 6);
    for(char i:arr){
        cout<<i<<" ";
    }
    cout<<sizeof(arr)<<endl;
    return 1;
}

// 输入:
//lihai

// 输出:
// l i h a i      10

2、对于 String 类型

#include<string>
String st;

使用getline(cin, st),也是同样是读取整行数据,以换行符 \n 作为输入结束。

这里面就有坑了,如果在 getline的前面还有一个 cin 输入,那么就会出现,geline那一行直接”跳过“。原因就是,cin 数据输入之后,会有一个换行,此时接着 getline 就会读取到这个换行符,就认为是结束了。

#include<string>
int main(){
    int n;
    string st;
    cin>>n;
    getline(cin, st);
    for(char i:st){
        cout<<i<<"-";
    }
    return 1;
}
//输入:
// 6

// 接着直接就输出,然后结束了
// 6

解决办法:在 cin 之后添加一个 getchar() ,读取掉换行符,就不会对后面的 getline 有影响。

int main(){
    int n;
    int c1;
    string st;
    cin>>n;
    c1 = getchar(); // getchar重点,看下面的讲解
    cout<<c1<<endl;
    getline(cin, st);
    for(char i:st){
        cout<<i<<"-";
    }
    return 1;
}

//输入:
// 6
// lihai

// 输出
// 10
// l-i-h-a-i-

这里面值得注意的是,getchar() 函数是将读取到的一个字符转换成 ASCII 值(int类型),如果不懂什么是 ASCII 码的可以看我之前写的文章ASCII、UTF8和Unicode之间的关系。例如上面的读取的是一个换行符 \n ,\n 对应的 ASCII 值是10,也就是上面输入6后回车就直接出来10。

总结:

遇到问题,多总结总输出,以备下次使用的时候,就不会乱找~

参考文章: https://blog.csdn.net/u012856866/article/details/77511809

4
西园公子
版权声明:本站原创文章,由西园公子2021-01-26发表,共计1297字。
转载提示:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
载入中...