C++复习基础教程

C++中的输入输出

C++基本输入输出语句

cin (标准输入流)

cin可以输入数字,字符和字符串,但是遇到空格回车就结束接受输入的数据。 ciniostream 类的一个实例。

例:

#include <iostream>
#include <string>

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

输入输出结果:
在这里插入图片描述

cout (标准输出流)

C++ 编译器根据要输出变量的数据类型,选择合适的流插入运算符来显示值。 coutiostream 类的一个实例。
输出示例如上例。

C++输入语句

gets()

gets()是在C语言中的函数,在C++中也可以使用,但是在某些编译器中会存在有bug。
例:

#include <iostream>
using namespace std;
int main(){
	char s[20];
	gets(s);
	cout<<s;
	return 0;
} 

注意:其中的s的类型只能是char数组类型的字符串,不能是string类型的字符串。

运行结果:
在这里插入图片描述
(两次运行相同的代码,运行结果不相同,原因未明)

getchar()

getchar()函数的作用是从标准的输入stdin中读取字符。
例:

//判断输入的是否为回车
if(getchar()=='\n'){
	break;
}

getline()

若定义变量为string类型,则要考虑getline()函数。getline()函数可以接收空格,但是数据类型应为string类型。

getline()有两种用法(参考):
istream& getline ( istream &is , string &str , char delim );
istream& getline ( istream &is , string &str );
is 进行读入操作的输入流
str 用来存储读入的内容
delim 终结符,遇到该字符停止读取操作,不写的话默认为回车

例1:

#include <iostream>
#include <string>
using namespace std;
int main(){
	string s;
	getline(cin,s);
	cout<<s;
	return 0;
} 

运行结果:
在这里插入图片描述
这里没有设置停止符,所以默认回车停止。
例2:

#include <iostream>
#include <string>
using namespace std;
int main(){
	string s;
	getline(cin,s,'!');//以!为结束符
	cout<<s;
	return 0;
} 

运行结果:
在这里插入图片描述
从运行结果可以看到,我们输入了回车键,但是并没有结束输入,直到输入了’!'才结束了输入;从输出结果我们可以看到,最后是输出了一个换行符的,说明换行符也当作了一个字符存入了字符串中。

C++输出语句

put()

put()iostream类的成员函数,功能是将一个字符写入文件。

putchar()

putchar函数的参数的类型是int,表示待输出的字符的ASCII码。65就是字符A的ASCII码,也就是’A’。putchar(65);等同于putchar(‘A’);都是输出字符A。

例:

#include <iostream>
using namespace std;
int main(){
	putchar(65);
	return 0;
} 

运行结果:
在这里插入图片描述
参数为整型且为ASCII码。

输入未知长度数组

vector

vector(向量): C++中的一种数据结构,确切的说是一个。它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的。(参考)
源程序中需要添加#include <vector>,当然,必须还要有using namespace std;

方法:

  • push_back 在数组的最后添加一个数据
  • pop_back 去掉数组的最后一个数据
  • at 得到编号位置的数据
  • begin 得到数组头的指针
  • end 得到数组的最后一个单元+1的指针
  • front 得到数组头的引用
  • back 得到数组的最后一个单元的引用
  • max_size 得到vector最大可以是多大
  • capacity 当前vector分配的大小
  • size 当前使用数据的大小
  • resize 改变当前使用数据的大小,如果它比当前使用的大,者填充默认值
  • reserve 改变当前vecotr所分配空间的大小
  • erase 删除指针指向的数据项
  • clear 清空当前的vector
  • rbegin 将vector反转后的开始指针返回(其实就是原来的end-1)
  • rend 将vector反转构的结束指针返回(其实就是原来的begin-1)
  • empty 判断vector是否为空
  • swap 与另一个vector交换数据

简单用例:

#include <iostream>
#include <vector>
#include <string>

using namespace std;
int main(){
	vector <int> array;//定义一个整型数组
	int x,count;
	int M,sum=0;
	for(int i=0;;i++){
		cin>>x;
		array.push_back(x);//在后面添加输入的数
		count++;
		if(getchar()=='\n'){
			break;
		}
	}
	cin>>M;
	for(int i=0;i<count;i++){
		for(int j=i+1;j<count;j++){
			if(array[i]+array[j]<=M){
				sum++;
			}
		}
	}
	cout<<sum;
	return 0;
}

vector初始赋值是使用的array.push_back(x)初始赋值不可以使用=直接赋值,赋值之后可以使用=更改数组的值。

头文件<string.h><cstring><string>的区别

#include<string.h>是C语言的标准库,主要是对字符串进行操作的库函数,是基于char*进行操作的,包含比如strcpystrcat之类的字符串处理函数。

#include<cstring>在C++标准化(1998年)过程中,为了兼容以前,标准化组织将所有这些文件都进行了新的定义,加入到了标准库中,加入后的文件名就新增了一个"c"前缀并且去掉了.h的后缀名,所以string.h头文件成了cstring头文件。

#include<string>是C++标准定义的头文件,它定义了一个string的字符串类,里面包含了string类的各种操作,如s.size(), s.erase(),s.insert()等。但<string>又包含了老的C版本的字符串操作如strcpystrcat等,这就相当于,在<string>的文件中除了定义自己的string类之外,还加了一个#include<string.h>一句包含了C版本的字符串操作。(但在实操当中,我试过strcat()函数还是需要引入<string.h>头文件,可能是编译器的问题?)

<string.h>部分函数

strcat()

C 库函数 char *strcat(char *dest, const char *src)src 所指向的字符串追加到 dest 所指向的字符串的结尾。

  • dest指向目标数组,该数组包含了一个 C 字符串,且足够容纳追加后的字符串。
  • src指向要追加的字符串,该字符串不会覆盖目标字符串。
    例:
int main(){
	char s1[]="this is my string!";
	char s2[]="attention ";
	strcat(s2,s1);//将s1的字符串连接到s2后面 
	cout<<s2;
	return 0;
}

运行结果:
在这里插入图片描述

strncat

C库函数 char *strncat(char *dest, const char *src, size_t n)src 所指向的字符串追加到 dest 所指向的字符串的结尾,直到 n字符长度为止。

  • dest指向目标数组,该数组包含了一个 C 字符串,且足够容纳追加后的字符串,包括额外的空字符。
  • src要追加的字符串。
  • n 要追加的最大字符数。
    例:
int main(){
	char s1[]="this is my string!";
	char s2[]="attention ";
	strncat(s2,s1,4);//将s1的4个字符串连接到s2后面 
	cout<<s2;
	return 0;
}

运行结果:
在这里插入图片描述

strcmp

C 库函数 int strcmp(const char *str1, const char *str2)str1 所指向的字符串和 str2 所指向的字符串进行比较。

  • 如果返回值小于 0,则表示 str1 小于 str2。
  • 如果返回值大于 0,则表示 str1 大于 str2。
  • 如果返回值等于 0,则表示 str1 等于 str2。

例:

#include <stdio.h>
#include <string.h>
 
int main ()
{
   char str1[15];
   char str2[15];
   int ret;
 
 
   strcpy(str1, "abcdef");
   strcpy(str2, "ABCDEF");
 
   ret = strcmp(str1, str2);
 
   if(ret < 0)
   {
      printf("str1 小于 str2");
   }
   else if(ret > 0) 
   {
      printf("str1 大于 str2");
   }
   else 
   {
      printf("str1 等于 str2");
   }
   
   return(0);
}

运行结果:
在这里插入图片描述

strcpy

C 库函数 char *strcpy(char *dest, const char *src)src 所指向的字符串复制到 dest。也有另一种使用方法int strncmp(const char *str1, const char *str2, size_t n)str1str2 进行比较,最多比较前 n 个字节。同上。

需要注意的是如果目标数组 dest 不够大,而源字符串的长度又太长,可能会造成缓冲溢出的情况。

  • dest指向用于存储复制内容的目标数组。
  • src 要复制的字符串。
#include <iostream>
#include <string.h>
#include <vector>
using namespace std;
int main(){
	char s1[]="this is my string!";
	char s2[]="attention ";
	strcpy(s2,s1);//将s1的字符串复制到s2
	cout<<s2;
	return 0;
}

运行结果:
在这里插入图片描述


将持续更新,敬请关注!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值