C++实验(四):数组、指针与字符串

本文通过实验介绍C++中指针与字符串的基础操作,包括指针的声明与使用、遍历输出字符串等。同时对比字符数组与String类的不同表现。

实验目的

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;
}
  1. 结果

 

代码(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语言的学习中接触过一部分,本次实验结合指针对其有了更深入地了解学习。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值