字符数组的初始化:
char c[] = {'C','h','i','n','a'}
char c[] = "China" //结果会有六个字符,最后一个c[5]是 \0
//上面这个方法只能在定义阶段,也就是和char一起使用。
正确的赋值方法:
char str1[] = "C++language",str2[20];
int i = 0;
while (str1[i] != '\0')
{
str2[i] = str1[i];
i++;
}
str2[i] = '\0';
于是就实现了把str1的值赋给str2。
所有字符串都是以 \0结尾的, 所有以\0为结尾的字符数组都是字符串。
cin无法实现字符格式转换。 且空格和回车一起处理为输入数据区分的标志。。
连续输入数据的方式:
while(cin >> str1)
{
...
}
一个字符的输入:
1. cin方法输入:
#include <iostream>
using namespace std;
int main() {
char c;
cout << "enter a sentence:" << endl;
while (cin >> c) {
cout << c;
}
return 0;
}
输入为:try a sentence
输出为:tryasentence
会把空格和回车都当作区分不同输入数据的,并非数据,所以读取的时候不会把空格和回车当作程序读入。
cin跳过空格,跳过回车。
ctrl+Z结束读取。
2. cin.get输入字符
#include <iostream>
using namespace std;
int main() {
char c;
cout << "enter a sentence:" << endl;
while ((c = cin.get()) != EOF) {
cout << c;
}
return 0;
}
输入为:try a sentence
输出为:try a sentence
这种方法会把所有空格和回车都当作都当作字符读取并且打印。
或者用这个方法:
#include <iostream>
using namespace std;
int main() {
char c;
cout << "enter a sentence:" << endl;
while (cin.get(c)) {
cout << c;
}
return 0;
}
3. getchar()输入字符
#include <iostream>
using namespace std;
int main() {
char c;
cout << "enter a sentence:" << endl;
while (c = getchar()) {
cout << c;
}
return 0;
}
这种方法可以跳过ctrlZ。
一串字符的输出
1.利用cout方法输出字符数组。
cout是读取数组,直到遇到\0,终止。
数组里不存在\0,则会出现乱码。
#include <iostream>
using namespace std;
int main() {
char c[10] = "Computer";
cout << c;
return 0;
}
输出结果为:Computer
#include <iostream>
using namespace std;
int main() {
char c[8] = { 'C','o','m','p','u','t','e','r' };
cout << c;
return 0;
}
输出结果为:Computer烫烫厷T
最后会存在乱码
另外,只有字符数组能直接用cout,如果是int型的数组,直接用cout会出现错误。
#include <iostream>
using namespace std;
int main() {
int a[8] = { 1,2,3,4,5,6 };
cout << a;
return 0;
}
结果为:009AFD5C
这是这个int型数组的起始地址。
若这是char a[8]
然后用cout<< a;
结果是正确的。
一串字符的输入:
- 直接利用cin输入:
#include <iostream>
using namespace std;
int main() {
char str[10];
while (cin >> str) {
cout << str << endl;
}
return 0;
}
对于字符数组,直接用cin>>str是可以的。
输入为:abc def ghi
结果为:
abc
def
ghi
会把空格和回车当作间隔标志。
- 利用cin.get()函数:
cin.get(ch,10,'\n')
这个函数是指,读取10-1(也就是9个)字符,赋值给ch,程序如果遇到\n会提前终止,且输出0;若没有,则读完9个,且输出1。
- 利用cin.getline()函数:
方法基本等同于cin.get。
区别在于getiline遇到终止标志字符结束,缓冲区指针移到终止标志字符之后。而get停止读取,指针就不动了。
因为一般人们往往把终止字符设为换行符 \n,所以cin.getline()读取时就可以直接跳过换行符,很方便。
注意:cin和cin.getline混合使用时可能出现错误,(少一个)
错误,因为会把换行符一起读进来。光标当时在7后面,换行符前面
这时候如果把换行符给读取掉,就可以了。因为cin.get可以读取换行符,啥都可以读取。(或者用getchar(),getline()的方法,只要把这个回车都去掉,就行了。)