Coursera_北大_C_language_字符与字符串

字符数组的初始化:

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; 
结果是正确的。

一串字符的输入:

  1. 直接利用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
会把空格和回车当作间隔标志。
  1. 利用cin.get()函数:
cin.get(ch,10,'\n')

这个函数是指,读取10-1(也就是9个)字符,赋值给ch,程序如果遇到\n会提前终止,且输出0;若没有,则读完9个,且输出1。

  1. 利用cin.getline()函数:
    方法基本等同于cin.get。
    区别在于getiline遇到终止标志字符结束,缓冲区指针移到终止标志字符之后。而get停止读取,指针就不动了。
    因为一般人们往往把终止字符设为换行符 \n,所以cin.getline()读取时就可以直接跳过换行符,很方便。

注意:cin和cin.getline混合使用时可能出现错误,(少一个)

错误,因为会把换行符一起读进来。光标当时在7后面,换行符前面
错误,因为会把换行符一起读进来。光标当时在7后面,换行符前面

在这里插入图片描述

这时候如果把换行符给读取掉,就可以了。因为cin.get可以读取换行符,啥都可以读取。(或者用getchar(),getline()的方法,只要把这个回车都去掉,就行了。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值