实验目的
1. 学习数组的声明与定义。
2. 了解数组越界问题及其影响。
3. 学习指针的基本使用,包括指针的声明、定义、赋值和取址,学习指针的sizeof运算、数学运算和逻辑运算。
4. 学习使用指针访问数组的方法,掌握指针与数组的对应机制,学习使用指针访问字符串的方法。
5. 学习C++中字符型数组与字符串之间的联系,学习关于字符型数组定义的一些特别的知识点。
实验内容
1. 定义一个字符串str,定义一个指向str首字符的指针sp,使用for循环,通过移动指针来遍历输出字符串的所有字符。
2. 改写刚才的程序,使用while结构完成遍历,以最后一个字符是否为“\0”
来判断是否结束循环。
3. 改写刚才的程序,仍然使用while结构。假设字符串str的长度为length,以指针是否指向字符串结尾字符(str[length])来判断是否结束循环。
4. 定义两个包含三个元素的字符数组a,b,给第一个数组赋3个字符作为数组元素,给第2个赋前面的两个字符,用cout<<数组名<<endl;的方式输出两个数组,比较输出结果。
5. 定义一个字符串数组char c[]={“ad”},用这个数组初始化一个字符串str,输出str和它的长度,与字符型数组的长度进行比较;如果定义的方式变为
char cc[4]={‘a’,’d’},输出会怎么样?编程测试,要求判断第2种情况下,字符串数组cc的第3个字符和第4个字符具体是什么。
实验过程
实验一
定义一个字符串str,定义一个指向str首字符的指针sp,使用for循环,通过移动指针来遍历输出字符串的所有字符。
代码(字符数组实现)
#include <iostream>
using namespace std;
int main()
{
int i;
char *sp;
char s[28]="Object oriented programming";
sp = s;
for(i=0;i<28;i++,sp++)
{
cout << *sp << endl;
}
return 0;
}
结果
代码(String类实现)
#include <iostream>
#include <string>
using namespace std;
int main(){
string str = "Object oriented programming";
const char *sp = str.c_str(); //定义一个指针变量指向字符串首地址
/*c_str():string类的成员函数。生成一个const char*指针,指向以空字符终止的数组。*/
for(int i=0;i<str.length();i++,sp++){
cout << *sp << endl;
}
}
结果
实验二
改写刚才的程序,使用while结构完成遍历,以最后一个字符是否为“\0”
来判断是否结束循环。
代码(字符数组实现)
#include <iostream>
using namespace std;
int main()
{
char *sp;
char s[50]="Object oriented programming";
sp = s;
while(*sp!='\0')
{
cout << *sp << endl;
sp++;
}
return 0;
}
- 结果
代码(String类实现)
#include <iostream>
#include <string>
using namespace std;
int main(){
string str = "Object oriented programming";
const char *sp = str.c_str(); //首地址赋给常量指针
/*c_str():string类的成员函数。生成一个const char*指针,指向以空字符终止的数组。*/
while(*sp != '\0'){
cout << *sp <<endl;
sp++;
}
}
结果
实验三
改写刚才的程序,仍然使用while结构。假设字符串str的长度为length,以指针是否指向字符串结尾字符(str[length])来判断是否结束循环。
代码(字符数组实现)
#include <iostream>
using namespace std;
int main()
{
int i=0;
char *sp;
char s[28]="Object oriented programming";
sp = s;
while(i<27)
{
cout << s[i] << endl;
i++;
}
return 0;
}
结果
代码(String类实现)
#include <iostream>
#include <string>
using namespace std;
int main(){
string str = "Object oriented programming";
const char *sp = str.c_str(); //首地址赋给常量指针
/*c_str():string类的成员函数。生成一个const char*指针,指向以空字符终止的数组。*/
while(*sp != str[str.length()]){
cout << *sp <<endl;
sp++;
}
}
结果
实验四
定义两个包含三个元素的字符数组a,b,给第一个数组赋3个字符作为数组元素,给第2个赋前面的两个字符,用cout<<数组名<<endl;的方式输出两个数组,比较输出结果。
代码
#include <iostream>
using namespace std;
int main()
{
char a[4]="abc";
char b[4]="ab";
cout << a << endl;
cout << b << endl;
return 0;
}
结果
实验五
定义一个字符串数组char c[]={“ad”},用这个数组初始化一个字符串str,输出str和它的长度,与字符型数组的长度进行比较;如果定义的方式变为
char cc[4]={‘a’,’d’},输出会怎么样?编程测试,要求判断第2种情况下,字符串数组cc的第3个字符和第4个字符具体是什么。
1. 输出str和它的长度,并与字符数组c[]长度比较
#include <iostream>
#include <string>
using namespace std;
int main(){
char c[] = "ad";
char cc[4] = {'a','d'};
string str = c;
cout << "length of c[] is " << sizeof(c)/sizeof(c[0]) << endl; //字符数组c的长度
cout << "str is " << str << endl; //输出str
cout << "length of str is " << str.length() << endl; //输出str的长度
}
2. char cc[4]={‘a’,’d’}定义数组,结果为

#include <iostream>
#include <string>
using namespace std;
int main(){
char c[] = "ad";
char cc[4] = {'a','d'};
string str = c;
cout << "length of c[] is " << sizeof(c)/sizeof(c[0]) << endl; //字符数组c的长度
cout << "length of cc[4] is " << sizeof(cc)/sizeof(cc[0]) << endl; //数组cc的长度
cout << "str is " << str << endl; //输出str
cout << "length of str is " << str.length() << endl; //输出str的长度
cout << "the 3rd and 4th character of cc[4] are " << cc[2] << "," << cc[3] << endl; //输出数组cc的第3、4个字符
}

即数组cc长度为4,第3、个字符都是空字符。
实验总结
这次实验主要学习指针、数组和字符串的相关知识。学习了数组的声明与定义、指针的基本使用包括用指针访问数组的方法;掌握了指针与数组的对应机制,学习使用指针访问字符串的方法。分别使用字符数组和String类完成实验对比,更深入了解了String类的实现原理和方法。
实验中遇到问题:
①直接定义指针变量指向字符串会报错。解决方案:将字符串首地址赋值给常量指针。
②定义字符数组格式错误。解决方案:重新复习C语言中字符数组定义声明的方法。关于字符数组的使用方法,在C语言的学习中接触过一部分,本次实验结合指针对其有了更深入地了解学习。
本文通过实验介绍C++中指针与字符串的基础操作,包括指针的声明与使用、遍历输出字符串等。同时对比字符数组与String类的不同表现。
:数组、指针与字符串&spm=1001.2101.3001.5002&articleId=110206580&d=1&t=3&u=e69cc2cdd05c48dc9bee40fb223f04bc)
6942

被折叠的 条评论
为什么被折叠?



