栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

郭炜-C语言程序设计-程序设计与算法(一)-第九周

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

郭炜-C语言程序设计-程序设计与算法(一)-第九周

第九周 1.指针和二维数组

如果定义二维数组:
T a[M][N];

  • a[i](i是整数)是一个一维数组
  • a[i]的类型是 T *
  • sizeof(a[i]) = sizeof(T) * N
  • a[i]指向的地址: 数组a的起始地址 + i×N×sizeof(T)
void Reverse(int * p,int size) { //颠倒一个数组
for(int i = 0;i < size/2; ++i) {
int tmp = p[i];
p[i] = p[size-1-i];
p[size-1-i] = tmp;
}
}
int a[3][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12}};
Reverse(a[1],4);
=> { {1,2,3,4},{8,7,6,5},{9,10,11,12}};
Reverse(a[1],6);
=> { {1,2,3,4},{10,9,5,6},{7,8,11,12}};
2.指向指针的指针

定义:

T ** p;
p是指向指针的指针,p指向的地方应该存放着一个类型为 T * 的指针
*p 的类型是 T *

#include 
using namespace std;
int main()
{
int **pp; //指向int*类型指针的指针
int * p;
int n = 1234;
p = &n; // p指向n
pp = & p; //pp指向p
cout << *(*pp) << endl; // *pp是p, 所以*(*pp)就是n
return 0;
}
=> 1234

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pF8U5Qeu-1655218282842)(F:markdown图片源路径image-20220614215128148.png)]

3.指针和字符串
  • 字符串常量的类型就是 char *
  • 字符数组名的类型也是 char *
#include 
using namespace std;
int main()
{
char * p = "Please input your name:n";
cout << p ; // 若不用cout, printf(p) 亦可
char name[20];
char * pName = name;
cin >> pName;
cout << "Your name is " << pName;
return 0;
}
____________________
Please input your name:
Jack↙
Your name is Jack
  • 字符数组名的类型也是 char *,就是一个地址.
char name[20];
int n;
scanf("%d%s",&n, name);
cin >> n >> name;
4.字符串操作库函数

  • char * strchr(const char * str,int c);【string char】

    寻找字符c在字符串str中第一次出现的位置。如果找到,就返回指向该位置的char*指针;如果str中不 包含字符c,则返回NULL。

  • char * strstr(const char * str, const char * subStr);【string substr】

    寻找子串subStr在str中第一次出现的位置。如果找到,就返回指向该位置的指针;如果str不包含字符串subStr,则返回NULL。

  • int stricmp(const char * s1,const char * s2);【string ignore compare】

    大小写无关的字符串比较。如果s1小于s2则返回负数;如果s1等于s2,返回0;s1大于s2,返回正数。不同编译器编译出来的程序,执行stricmp的结果就可能不同。

  • int strncmp(const char * s1,const char * s2,int n);【string number compare】

    比较s1前n个字符组成的子串和s2前n个字符组成的子串的大小。若长度不足n,则取整个串作为子串。返回值和strcmp类似。

  • char * strncpy(char * dest, const char * src,int n);【string number copy】

    拷贝src的前n个字符到dest。如果src长度大于或等于n,该函数不会自动往dest中写入‘’;若src长度不足n,则拷贝src的全部内容以及结尾的‘’到dest。

  • char * strtok(char * str, const char * delim);【string token 标记 delimiter:定界符,分隔符】

    连续调用该函数若干次,可以做到:从str中逐个抽取出被字符串delim中的字符分隔开的若干个子串。

  • int atoi(char *s);【ascii to integer】

    将字符串s里的内容转换成一个整型数返回。比如,如果字符串s的内容是“1234”,那么函数返回值就是1234。如果s格式不是一个整数,比如是"a12",那么返回0。

  • double atof(char *s);【ascii to floating point numbers】

    将字符串s中的内容转换成实数返回。比如,"12.34"就会转换成12.34。如果s的格式不是一个实数 ,则返回0。

  • char *itoa(int value, char *string, int radix);【integer to ascii】

    将整型值value以radix进制表示法写入 string:

    char szValue[20];
    itoa( 27,szValue,10); //使得szValue的内容变为 "27"
    itoa( 27,szValue,16); //使得szValue的内容变为"1b"
    
例案:
#include 
#include 
using namespace std;
int main() {
	char s1[100] = "12345";
	char s2[100] = "abcdefg";
	char s3[100] = "ABCDE";
	strncat(s1,s2,3); // s1 = "12345abc"
	cout << "1) " << s1 << endl; //输出 1) 12345abc
	strncpy(s1,s3,3); // s3的前三个字符拷贝到s1,s1="ABC45abc"
	cout << "2) " << s1 << endl; //输出 2) ABC45abc
	strncpy(s2,s3,6); // s2 = "ABCDE"
	cout << "3) " << s2 << endl; //输出 3) ABCDE
	cout << "4) " << strncmp(s1,s3,3) << endl;
//比较s1和s3的前三个字符,比较结果是相等,输出 4) 0
	char * p = strchr(s1,'B'); //在s1中查找 'B'第一次出现的位置
	17
	if( p ) // 等价于 if( p!= NULL)
		cout << "5) " << p - s1 <<"," << *p << endl; //输出 5) 1,B
	else
		cout << "5) Not Found" << endl;
	p = strstr( s1,"45a"); //在s1中查找字串 "45a"。s1="ABC45abc"
	if( p )
		cout << "6) " << p - s1 << "," << p << endl; //输出 6) 3,45abc
	else
		cout << "6) Not Found" << endl;
//以下演示strtok用法:
	cout << "strtok usage demo:" << endl;
	char str[] ="- This, a sample string, OK.";
//下面要从str逐个抽取出被" ,.-"这几个字符分隔的字串
	p = strtok (str," ,.-"); //请注意," ,.-"中的第一个字符是空格
	while ( p != NULL) { //只要p不为NULL,就说明找到了一个子串
		cout << p << endl;
		p = strtok(NULL, " ,.-"); //后续调用,第一个参数必须是NULL
	}
	return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/971355.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号