C语言:
1、gets()和puts()
用法: gets(line);puts(line);
其中,line是字符数组(注:C语言中没有独立定义字符串的变量类型,而是采用字符数组的形式;字符串和字符数组很大的区别就是字符串以
'\0'
结尾)
函数特点:
(1)在读入一行时,空格也会作为一个字符读入;
(2)如果读入一行的字符串长度超过字符数组定义的长度,会出现警告;
(3)用gets()读入时,只有遇到回车
'\n'
才会结束读入,并在末尾自动添加
'\0'
;
用puts()输出时,只有遇到
'\0'
才会停止输出,因此在输出通过字符数组定义的字符串时末尾一定要添加
'\0'
,否则会出错。
示例代码:
#include<stdio.h>
const int maxn=+;
int main()
{
char line[maxn];
gets(line);
puts(line);
return ;
}
结果:
2、getchar()和putchar()
用法: c=getchar(); putchar(c);
其中,c是int型;如果写成
char c;
c = getchar();
有时可能出现错误,因为getchar函数除了返回终端输入的字符外,在遇到Ctrl+Z即文件结束符EOF时,getchar ()返回的EOF在函数库里一般定义为-1。因此,在这种情况下,getchar函数返回一个负值,把一个负值赋给一个char型的变量是不正确的。
函数特点:
(1)用getchar读入时,如果不按回车符,所有输入会放入缓冲区,而不会被读入,所以执行c=getchar();时,我们输入第一行后如果不按回车键,第一行仍然不会读入;
(2)每行结束输入按回车时,虽是用来告诉系统输入已结束,但同时回车符
'\n'
也会作为一个字符放入缓冲区 ;
(3)putchar()输出指定字符,不会在输出后自动换行,所以在每行结束输入时要用putchar(‘\n’)换行;
(4)getchar可以读入所有字符,包括空格、回车符等;
(5)windows下如果想结束,就输入Ctrl+Z,表示EOF。
标准写法:
#include<stdio.h>
int main()
{
int c;
c=getchar();
while(c!=EOF){
putchar(c);
c=getchar();
}
return ;
}
结果:
例题运用:
链接:L1-011. A-B
本题要求你计算A-B。不过麻烦的是,A和B都是字符串 —— 即从字符串A中把字符串B所包含的字符全删掉,剩下的字符组成的就是字符串A-B。
输入格式:
输入在2行中先后给出字符串A和B。两字符串的长度都不超过104,并且保证每个字符串都是由可见的ASCII码和空白字符组成,最后以换行符结束。
输出格式:
在一行中打印出A-B的结果字符串。
输入样例:
I love GPLT! It’s a fun game!
aeiou
输出样例:
I lv GPLT! It’s fn gm!
示例代码:
#include<stdio.h>
#include<string.h>
const int maxn=+;
char line[maxn];
int main()
{
int b[],c;
memset(b,,sizeof(b));
gets(line);
while((c=getchar())!='\n') b[c]=;
int i=;
while(line[i]!=){
if(!b[line[i]]) putchar(line[i]);
i++;
}
putchar('\n');
return ;
}
C++:
1、cin.getline(line,x,c)
用法: cin.getline(字符串变量,字符个数,结束字符);
其中,line是用字符数组定义的字符串;
当第三个参数缺省时,系统默认为
'\0'
;
函数特点:
(1)读入字符串,并且可以读入并输出空白符,遇结束字符或默认的
'\0'
结束,按回车符后才会从缓冲区读取;
(2)函数属于istream流。
示例代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<sstream>
using namespace std;
const int maxn=+;
char line[maxn];
int main()
{
cin.getline(line,maxn,'!');
cout<<line<<endl;
return ;
}
结果:
2、getline(cin,line)
**用法:**getline(cin,line)
其中,line是string定义的字符串;
函数特点:
(1)可以读入并输出空白符,遇
'\n'
停止读入并在末尾自动添
'\0'
;
(2)函数属于string流,需包含头文件< string >
示例代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<sstream>
using namespace std;
string line;
int main()
{
while(getline(cin,line))
cout<<line;
return ;
}
结果:
3、cin.get()和cout.put()
**用法:**c=cin.get(); cout.put(c);
其中,c是字符;
函数特点:读入单个字符,可以读入空白符;
示例代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<sstream>
using namespace std;
char line;
int main()
{
while((line=cin.get())!='\n')
cout.put(line);
return ;
}
结果: