字符串的的存储与输入问题

简介: 字符串的的存储与输入问题

1、字符串的拼接

字符串有时候很长,无法放到一行中,c++允许拼接字符串字面值,两个用引号括起来的字符串合并为一个,两个由空白(空格,制表符和换行符)分隔的字符串常量都将自动拼接成一个。

如:

1. #include<iostream>
2. using namespace std;
3. int main()
4. {
5. 
6.  cout << "i love you" << endl;
7.  cout << "i love " "you" << endl;
8.  cout << "i love "
9.    "you" << endl;
10. 
11.   system("pause");
12.   return 0;
13. }

当然了,拼接的时候空格是不会在字符串中出现的。

该程序运行结果如下:

2、字符串的存储

在数组中使用字符串,常用2种方法。一是将数组初始化为字符串常量,二是将键盘或文件输入读入到数组中。同时,用strlen()函数来确定字符串的长度。其标准头文件为cstring (老式为string.h)。有人可能会说到sizeof,这里sizeof是整个数组的长度,但是strlen()则返回的是数组中字符串的长度并不是数组的长度。注意一点是,strlen()函数只计算可见的字符,也就是说不把空字符计算在内。

1. #include<iostream>
2. #include<cstring>
3. using namespace std;
4. int main()
5. {
6.  const int Size = 15;
7.  char name1[Size];
8.  char name2[Size] = "ACE";
9.  cout << "My name is " << name2 << ".And your name?" << endl;
10.   cin >> name1;
11.   cout << "My name is " << name1 << endl;
12.   cout << "wow,your name has " << strlen(name1) << " letters.\n";
13.   cout << "the size of name1 is " << sizeof(name1) << " bytes.\n";
14. 
15. 
16.   system("pause");
17.   return 0;
18. }

该程序体现了这些点。

程序结果:

3、字符串的输入

首先对于常用的cin输入在这里有一点小小的毛病,那就是cin是使用空白(空格,制表符和换行符)来确定字符串的结束位置,这意味着cin在获取字符数组输入时只读取一个单词。那么该怎么避免这些错误呢?这就需要下面的方法来解决了!

即面向行的输入:一种是getline()和get(),下面介绍这两种方式

(1)getline()函数读取整行,使用回车键输入的换行符来确定输入的结尾,使用时的格式为cin.getline()。函数中有两个参数,第一个用来存储输入行的数组名,第二个参数是要读取的字符数。这里要注意一点就是如果参数是20,那么它最多读取19个字符,最后一个空间要用来存储自动在结尾添加的空字符。

如:cin.getline(name,20);

1. #include<iostream>
2. #include<cstring>
3. using namespace std;
4. int main()
5. {
6.  const int Size = 20;
7.  char name[Size];
8.  char sport[Size];
9.  cout << "What's your name?\n";
10.   cin.getline(name, Size);
11.   cout << "My name is "<<name<<".\n";
12.   cout << "What's your favorite sport?\n";
13.   cin.getline(sport, Size);
14.   cout << "I like "<<sport<<" best.\n";
15.   system("pause");
16.   return 0;
17. }

程序运行结果:

getline()函数每次读取一行,通过换行符来确定行尾,但不保存换行符。相反,在存储字符串时,用空字符来替换换行符。

即如下图所示意的过程:

(2)面向行的输入:get()

get()函数是cin输入流对象的成员函数

该函数有几种变体,其中一种与getline()函数类似,但get()不再读取并丢弃换行符,而是将其留在输入队列中,下面调用两次该函数解释一下:

1. cin.get(name,Size);
2. cin.get(sport,Size);//会出现问题

怎么说呢,第一个字符串输入后末尾的换行符将留在队列中,等到第二次调用时,看到的第一个字符便是换行符,它会认为到达行尾,所以不会发现可读取的内容。

但是,依然可以借助一些手段解决这个问题:

get()函数的另一种变体,cin.get()(不含参数)可以用来处理换行符(当然其他的也可以)为读取下一行做准备工作。

如:

1. cin.get(name,Size);//read first line
2. cin.get();         //read new line
3. cin.get(sport,Size);//read second line

get()函数还有一种用途是将两个类成员函数拼接起来,如下所示:

cin.get(name,Size).get();

简单来说就是相当于这两步:

1. 
2. cin.get(name,Size);//read first line
3. cin.get();         //read new line

另外,getline()也有类似用法:

cin.getline(name1,Arsize).getline(name2,Arsize);

下面用一个详细的程序来进行说明:

1. #include <iostream>
2. using namespace std;
3. int main()
4. {
5.  const int Arsize = 20;
6.  char name[Arsize];
7.  char sport[Arsize];
8.  cout << "Enter your name: \n";
9.  cin.get(name, Arsize).get();
10.   cout << "Enter your favorite sport: \n";
11.   cin.get(sport, Arsize).get();
12.   cout << "I am " << name << " ,and I like " << sport << " best.\n";
13. 
14.   return 0;
15. }

该程序的运行结果如下:

4、混合输入字符串和数字

这个内容基本在于前面内容的理解这边放两个例子,看看能不能理解一下

首先看原始代码:

1. #include <iostream>
2. using namespace std;
3. int main()
4. {
5. 
6.  const int Size = 10;
7.  cout << "How old are you?" << endl;
8.  int age;
9.  cin >> age;
10.   cout << "What's your name?\n";
11.   char name[Size];
12.   cin.getline(name, Size);
13.   cout << "Your age :" << age << endl;
14.   cout << "Your name :" << name << endl;
15. 
16.   return 0;
17. }

该程序会出现错误。为什么呢?因为在输入数字的时候,回车键也就是换行符会留存下来,在进行字符数组的输入的时候最先读到换行符,函数将直接结束无法读取name数组,导致用户没有输入名字的机会,所以要在输入名字前做一些改动,具体有以下两种做法:

(1)

1.   cin >> age;
2.   cin.get();//or cin.get(ch);

(2)

(cin >> age).get();//or (cin >> age).get(ch);

内容有不对的地方希望大家指正,大家一起进步,加油噢!

好嘞,以上就是今天所要学习的内容,希望对c++刚刚入门的大兄弟,小姐姐们有所帮助,我是小白,小白给你不一样的内容!


相关文章
|
2月前
|
机器学习/深度学习 人工智能 JavaScript
输入数组
输入数组。
48 14
|
7月前
53.从键盘输入任意一串字符串,程序输出同样的一串字符,要求输出字符串中大小写相互转化,其他符号不变。如输入“a123BxC”,则输出“A123bXc”
53.从键盘输入任意一串字符串,程序输出同样的一串字符,要求输出字符串中大小写相互转化,其他符号不变。如输入“a123BxC”,则输出“A123bXc”
53 0
|
7月前
字符串的表示形式
字符串的表示形式。
68 6
|
7月前
输入一个字符串,统计其中字符A的数量并且输出,输入共有一行,为一个不带空格的字符串(其中字符数不超过100),输出一行,包含一个整数,为输入字符串中的A的数量
输入一个字符串,统计其中字符A的数量并且输出,输入共有一行,为一个不带空格的字符串(其中字符数不超过100),输出一行,包含一个整数,为输入字符串中的A的数量
|
BI
输入正整数 转化为 二进制数输出
输入正整数 转化为 二进制数输出
109 0
|
C++
c++输出字符串
c++输出字符串
109 1
|
C语言 C++
输入一个字符串并使其反序输出
输入一个字符串并使其反序输出
如何将Excel中以文本形式存储的数字批量快速地转换为数值类型
如何将Excel中以文本形式存储的数字批量快速地转换为数值类型
如何将Excel中以文本形式存储的数字批量快速地转换为数值类型
|
Java 编译器 Go
字符串输出3种方式|学习笔记
快速学习字符串输出3种方式。
461 0
字符串输出3种方式|学习笔记
|
存储 安全 前端开发
Go-字符和字符串类型详解(原始字符串、拼接、修改、比较、拆分、查找等)
Go-字符和字符串类型详解(原始字符串、拼接、修改、比较、拆分、查找等)
160 0
Go-字符和字符串类型详解(原始字符串、拼接、修改、比较、拆分、查找等)