【漫漫转码路】Day32C++day05-创新互联-成都创新互联网站建设

关于创新互联

多方位宣传企业产品与服务 突出企业形象

公司简介 公司的服务 荣誉资质 新闻动态 联系我们

【漫漫转码路】Day32C++day05-创新互联

函数 函数参数上传数组

数组不能作为入口参数传给函数
只能上传地址

凤城网站建设公司创新互联,凤城网站设计制作,有大型网站制作公司丰富经验。已为凤城1000+提供企业网站建设服务。企业网站搭建\成都外贸网站制作要多少钱,请找那个售后服务好的凤城做网站的公司定做!
//例如
int func(int a)  // 接收数组a
{return a;
}
int main()
{int a[3] = {1, 2, 3 };
	func(a);  // 上传数组a
}

上述情况会报错
只能通过上传地址的方式来上传数组

// 例如
int func(int *a)
int func(int a[])  //两种方式等价

相对应的

// 例如
(*p+i)=2;
p[i] = 2;  //两者也等价
//例如
#include#include#includeusing namespace std;

void func(int a[])
{for (int i = 0;i< 3;i++)
	{a[i] = 10;
	}
}
int main()
{int a[3] = {1, 2, 3 };
	func(&a[0]);  //  注意此处写成&a[0]也可以,表示指针放在0位
	for (int i = 0;i< 3;i++)
	{cout<< a[i]<< " ";
	}
}
函数内部函数

函数内部函数只能在函数内部使用,在函数完成之后就被销毁
从外部调用时非法的

//例如
#include#include#includeusing namespace std;

int* func(int a,int b)  //返回指针类型的
{int c = a + b;
	return &c;  // c是地址
}
int main()
{int a = 3;
	int b = 4;
	int *d = func(a,b);  // 用*d来接受
	cout<< *d;  // 输出d
}

以上情况尽管可以运行,但是是非法的
不可以对函数内部变量内存进行操作
函数内部变量的内存地址不可随便输出
不可以输出一个访问函数内部变量的引用

容易发生崩溃及程序错乱

字符串

单引号为字符类型
双引号为字符串类型
字符串存储在数组中;
需要提前开辟一块足够大的内存空间;
存储字符串的数组的大小要大于字符串长度+1;
在这里插入图片描述
存储三个字符串abc的数组a[3]是不够的,需要至少四个;

//字符串的两种创建形式
int main()
{char a[4] = "abc";
	const char *p = "123";
}
字符串结尾\0

之所以说一个"abc"字符串需要至少四个空间,是因为字符串的结尾都是用‘\0’来表示的,所有字符串的结尾都认为有一个‘\0’,不会显示出来
注意,‘\0’一定是单引号!

//例如
#include#include#includeusing namespace std;

int main()
{char a[4] = "abc";
	
	cout<< a[3]<< "\n";  // "abc"索引只到2,但是输出索引3不会报错,但是输出结果什么也没有
	cout<< (int)a[3];  // 强制类型转换,如果转换成数字,会发现是0
}
//显示

0
//例如
int main()
{char a[100] = "apple";
	a[3] = '\0';  //在索引为3也就是,l的位置重新赋值为'\0'
	cout<< a<< "\n";
	cout<< a[4];  // 字符串虽然被截断,但是截断后面的字符串还是可以索引到
	
}
//显示
app  //结果只显示'\0'之前的,表示在'\0'就停止了
e  //截断后面的字符串还是可以索引到

声明的时候手动添加’\0’

/例如
int main()
{char a[100] = "app\0le";
	cout<< a<< "\n";
	cout<< a[4];
}
//显示
app  //可以看到,在声明的时候,如果加入了'\0',则系统认为该字符串在此处停止
l  // 但是后面的字符串还是能够索引得到
计算字符串长度
//例如
int len(char a[])  //注意此处上传char a[],不是int a[]
{int i = 0;
	for (;a[i] != '\0';i++)  //循环,在a[i] == '\0'处结束,
	{	}
	return i;
}
int main()
{char a[100] = "apple";
	int x = len(a);
	cout<< x ;
}
//显示
5
字符串拼接
//例如
int len(char a[])  // 求长度
{int i = 0;
	for (;a[i] != '\0';i++)
	{}
	return i;
}
void sp(char a[], char b[],char outc[])  //字符串拼接
{int i, j;
	for (i = 0;a[i] != '\0';i++)
	{outc[i] = a[i];
	}
	for (j = 0;b[j] != '\0';j++)
	{outc[j + i] = b[j];
	}
	outc[i + j] = '\0';
}

int main()
{char a[100] = "apple";
	char b[100] = "orange";

	char c[100];
	sp(a, b, c);
	cout<< c<< "\n";

	int x = len(c);
	cout<< x ;
}
//显示
appleorange
11
字符串函数

需要在前面加声明,才能使用这些函数

#define _CRT_SECURE_NO_WARNINGS
strcat

strcat(a,b):可以将字符串a和字符串b拼接起来,返回一个指向返回值的指针

//例如
int main()
{char a[100] = "apple";
	char b[100] = "orange";
	char *p;
	p = strcat(a, b);  //返回值是个指针
	cout<< p;
}
//显示
appleorange
strcpy

char * strcpy(char * strDest,const char * strSrc);将const char * strSrc(源地址:被复制的字符串的首地址,用const修饰,避免修改掉被拷贝的字符串),复制到char * strDest(目标字符串的首地址)中去,返回的是目标字符串的首地址
strcpy(a,b)将b的值拷贝到a中,会将a的值覆盖

//例如
int main()
{char a[100] = "apple";
	char b[100] = "orange";
	char c[100] = "a";
	char *p;
	p = strcpy(a, c);
	cout<< p<<"\n";
	cout<< a;
}
//显示
a  // 覆盖掉a原来的值
a  // 输出a,发现也是一样
strcmp

extern int strcmp(const char *s1,const char *s2);
strcmp(a,b)比较两个字符串,如果a=b则返回0,a>b,则返回正数,a

//例如
int main()
{char c[100] = "a";
	char d[100] = "b";
	char e[100] = "c";
	char *p;
	int m = strcmp(c, d);
	int n = strcmp(e, c);
	cout<< m<<"\n";
	cout<< n<< "\n";
	cout<< strcmp(c, c)<< "\n";
}
//显示
-1  //右大于左
1  //左大于右
0  //字符串相同
strlen

strlen(a);返回字符串长度;

//例如
int main()
{char a[100] = "apple";
	int x = strlen(a);
	cout<< x<< "\n";
}
/显示
5
大小写转换
//例如
void change(char *a)
{for (int i = 0;a[i] != '\0';i++)
	{if (a[i] >='a' &&a[i]<='z')
		{	a[i] = a[i] - 'a' + 'A';
		}
		else if (a[i] >='A' &&a[i]<='Z')
		{	a[i] = a[i] - 'A' + 'a';
		}
	}
}

int main()
{char a[100] = "apPlE";
	
	change(a);
	for (int i = 0;a[i] != '\0';i++)
	{cout<< a[i];
	}
//显示
APpLe
字符串变成数字 手写
//例如
int sTi(char* a)
{int n;
	int res = 0;
	int mi = 1;

	for (n = 0;a[n] != '\0';n++)
	{}
	// n就是字符串长度

	for (int i = n - 1;i >= 0;i--)
	{res += (a[i] - '0') * mi;
		mi = mi * 10;
	}
	return res;
}
int main()
{char a[100] = "315426";
	int d = sTi(a);
	cout<< d;
// 显示
315426
函数atoi和atof

atoi:将字符串转换成为数字,整型;
atof:将字符串转换成为数字,浮点型;

//例如
int main()
{char a[100] = "315426";
	int d = atoi(a);
	float e = atof(a);
	cout<< d<< "\n";
	cout<< e;
}
数字转字符串
//例如
void iTs(int a, char* res)
{int x[100];
	int m = 0;
	while (a != 0)  //用while循环得到长度和数组倒序数组
	{int b = a % 10;
		a = a / 10;
		x[m] = b;
		m += 1;
	}
	for (int i = 0;i< m;i++)  //将倒序数组倒序放到字符串中去
	{res[m - 1 - i] = '0' + x[i];
	}
	res[m] = '\0';
}
int main()
{int a = 13546;
	char res[100];
	iTs(a, res);
	//cout<< m;
	for (int i = 0;res[i] != '\0';i++)
	{cout<
//显示
13546
string

前面需要声明

#includeusing namespace std;

利用string变量可以实现字符串相加

//例如
int main()
{string s = "abc";  //声明成为string变量可以直接实现字符串拼接
	string a = "123";
	cout<< s + a;
}
//显示
abc123
例题

有一个字符串 “I am a good boy. I like sports.”,找出其中出现次数最多的字母,并且输出它的出现次数

//例如
void FindMostTimesChar(char* pIn, char& outChar, int& outTimes)
{//一个数组初始化为0
	int x[200];
	for (int i = 0; i< 200; i++)
	{x[i] = 0;
	}
	// 将大写字母和小写字母的出现次数存放在数组中
	for (int i = 0;pIn[i] != '\0';i++)
	{if (pIn[i] >= 'a' && pIn[i]<= 'z')
		{	int q = pIn[i] - 'a'; //数组x的索引0-25存小写字母;
			x[q] += 1;
		}
		else if (pIn[i] >= 'A' && pIn[i]<= 'Z')
		{	int q = pIn[i] - 'A'; //数组x的索引26-51存大写字母出现次数;
			x[q + 26] += 1;
		}
	}
	//找到大值,也就是出现次数最多的字母的索引和次数
	int maxnum = 0;  // 大出现的次数
	int maxid = 0;  // 对应的索引,也就是是哪个字母
	for (int i = 0;i< 52;i++)
	{if (x[i] >maxnum)
		{	maxnum = x[i];
			maxid = i;
		}
	}
	//按照规则还原成字母和次数
	if (maxid >25)
	{outChar = 'A' + (maxid - 26);
		outTimes = maxnum;
	}
	else if (maxid< 25)
	{outChar = 'a' + maxid;
		outTimes = maxnum;
	}

}

int main()
{char a[100] = "I am a good boy. I like sports.";
	char res;
	int num;
	FindMostTimesChar(a, res, num);
	cout<< res<< " "<< num;
}
//显示
o 4

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


当前题目:【漫漫转码路】Day32C++day05-创新互联
转载源于:http://kswsj.cn/article/dsegjg.html