字符与字符串输入输出
1.字符输入输出
输入一个字符:getchar()
输出一个字符:putchar(字符变量或常量)
char ch=getchar();
putchar(ch);
输入一个字符还可用:scanf(输入格式)
输出一个字符还可用:printf(输出格式)
char ch;
scanf("%c",&ch);
printf("%c",ch);
getchar()和putchar()效率优于scanf()和printf()
eg:
#include <iostream>
using namespace std;
int main() {
char ch;
int i = 1;
while (ch = getchar()) {
cout << i << ":" << (int)ch << endl;
++i;
}
return 0;
}
输入:空格 a b c 制表符 d 回车
输出:(输出各个内容的ASCⅡ码)
当缓冲区为空的时候才会停下
1.1字符输入输出要注意的问题
1.输入一个数字n,接下来输入n组数据,每组两个字符,每输入一组数据则输出这组数据,每组输出占一行。
eg
#include <iostream>
using namespace std;
int main() {
int n;
char a, b;
scanf("%d", &n);
while (n > 0) {
scanf("%c%c", &a, &b);
printf("%c%c\n", a, b);
--n;
}
return 0;
}
输入:
4回车
ab回车
cd回车
ef回车
输出:
修改后:
#include <iostream>
using namespace std;
int main() {
int n;
char a, b;
scanf("%d", &n);
getchar();//吞掉scanf后面的那个回车
while (n > 0) {
scanf("%c%c", &a, &b);
getchar();//吞掉scanf后面的那个回车
printf("%c%c\n", a, b);
--n;
}
return 0;
}
输入:
4回车ab回车cd回车ef回车
输出:
输入一个字符还可用:cin
输出一个字符还可用:cout
#include <iostream>
using namespace std;
int main() {
char ch;
int i = 1;
while (true) {
cin >> ch;
cout << i << ":" << (int) ch << endl;
++i;
if ((int)ch == 10) {
i = 1;
}
}
return 0;
}
输入:abc空格d制表符e回车
cin从键盘缓冲中取字符的时候会过滤空格、制表符等,这些特殊字符不会传输给ch。
2.字符串的输入输出
char s[maxSize];
gets(s);
scanf("%s",s);//不把空格、回车符、制表符当作普通字符接受
gets、scanf和cin会自动在串尾补上一个’\0‘字符作为字符串的结束标记。
用puts(s)、printf(“%s”,s)或cout>>s可以输出s串,事实上,这三个函数都属输出从第一个字符到’\0’之前的所有字符,并且puts会自动换行。
如果s为string类型,则用cout<<s来输出串。
#include <iostream>
using namespace std;
int main() {
char s[10];
for (int i = 0; i <= 9; ++i)
s[i] = '\0';
gets(s);
for (int i = 0; i <= 6; ++i)
cout << i << ":" << (int)s[i] << endl;
return 0;
}
输入:abc空格d制表符回车
输出:
修改后:
#include <iostream>
using namespace std;
int main() {
char s1[10], s2[20];
for (int i = 0; i <= 9; ++i) {
s1[i] = '\0';
s2[i] = '\0';
}
scanf("%s%s", s1, s2);
for (int i = 0; i <= 6; ++i)
cout << i << ":" << (int)s1[i] << endl;
cout << endl;
for (int i = 0; i <= 6; ++i)
cout << i << ":" << (int)s2[i] << endl;
return 0;
}
输入:abc空格d制表符回车
输出:
eg:
#include <iostream>
using namespace std;
int main() {
string s;
getline(cin, s); //第二个s是一个string型变量
for (int i = 0; i < s.length(); ++i)
cout << i << ":" << (int)s[i] << endl;
return 0;
}
输出: