字符型指针数组

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>
#include<stdlib.h> //参数中,int a[5],对应指向int类型的指针int *
//参数中,指针数组对应char *cmd[]二级指针char **
void showcmd(char **cmd, int n)
{
//此时数组退化成一个指针
printf("show=%d\n", sizeof(cmd)); int i; for (i = ;i < n;i++)
{
printf("%s\n", cmd[i]);
}
} main()
{
//一个指针数组,每个元素是指针,每个指针保存字符串常量的地址
char *cmd[] = { "notepad","calc","mspaint","write","mstsc" }; printf("main=%d\n", sizeof(cmd)); showcmd(cmd, ); system("pause");
}

指针循环,字符型指针数组

 #define _CRT_SECURE_NO_WARNINGS

 #include<stdio.h>
#include<stdlib.h> main()
{
//一个指针数组,每个元素是指针,每个指针保存字符串常量的地址
char *cmd[] = { "notepad","calc","mspaint","write","mstsc" }; printf("%x\n", cmd); char **p = NULL; for (p = cmd;p < cmd + ;p++)
{
printf("%s\n", *p);
} system("pause");
}

//在函数里面改变一个外部变量,就需要变量的地址
//如果是整数,函数指向数据的指针存储数据的地址
//如果是指针,就需要指向指针的指针的地址
//二级指针一般用于改变一个字符串指针的指向,指向不同的字符串

 #define _CRT_SECURE_NO_WARNINGS

 #include<stdio.h>
#include<stdlib.h> char str1[] = "notepad";
char str2[] = "tasklist";
char str3[] = "calc"; //在函数里面改变一个外部变量,就需要变量的地址
//如果是整数,函数指向数据的指针存储数据的地址
//如果是指针,就需要指向指针的指针的地址
//二级指针一般用于改变一个字符串指针的指向,指向不同的字符串 void change(char **pp)
{
*pp = str3;
} main()
{
char *p = str1; change(&p); printf("%s", p); system("pause");
}

输入的扫描器:

 #define _CRT_SECURE_NO_WARNINGS

 #include<stdio.h>

 main()
{
char str[] = { }; //scanf("%[xyz]", str);
/* 只接受xyz的输入,有一个不匹配,就停止,即使后面还有xyz */ //scanf("%[^xyz\n]", str);
/* 前面加上^按位异或,可以读取xyz以外的任何字符,遇到一个匹配xyz\n就自动终止 */ scanf("%[^xyz]", str);
/* 如果没有\n,回车不会当作终止,会当作一个字符 */ //scanf("%[A-Z]", str);
/* 只接受A-Z的输入,有一个不匹配,就停止,即使后面还有A-Z */ puts(str);
}

char 字符串可以显示汉字,字符要连在一起%c%c

 #include<stdio.h>

 main()
{
char str[] = "你好"; printf("%c%c\n", str[], str[]);
}

输出结果:


请按任意键继续. . .

 #include <stdio.h>
main()
{
int a;
a = ;
printf("sizeof(int)=%ld\n", sizeof(int));
printf("sizeof(a)=%ld\n", sizeof(a));
}

输出结果:

sizeof(int)=4
sizeof(a)=4
请按任意键继续. . .

字符串排序有2种:

1长度strlen

2比较strcmp

读入一个3行的二维字符串数组,使用求字符串长度函数strlen,进行从大到小排序,使用冒泡排序。

 #define _CRT_SECURE_NO_WARNINGS

 #include <stdio.h>
#include <string.h>
main()
{
int i, j;
char t[], a[][];
for (i = ;i < ;i++) /* 为a表赋值 */
{
gets(a[i]);
} printf("\n");
for (i = ;i < ;i++) /* 输出a表 */
{
puts(a[i]);
}
printf("\n"); for (i = ;i < - ;i++)
{
for (j = ;j < - - i;j++)
{
if (strlen(a[i]) < strlen(a[j])) /* 求字符串长度函数strlen */
{
strcpy(t, a[i]); /* 字符串复制函数strcpy */
strcpy(a[i], a[j]);
strcpy(a[j], t);
}
}
} for (i = ;i < ;i++) /* 输出a表 */
{
puts(a[i]);
} system("pause");
}

读入一个3行的二维字符串数组,使用字符串比较函数strcmp,进行从大到小排序,使用冒泡排序。

 #define _CRT_SECURE_NO_WARNINGS

 #include <stdio.h>
#include <string.h>
main()
{
int i, j;
char t[], a[][];
for (i = ;i < ;i++) /* 为a表赋值 */
{
gets(a[i]);
} printf("\n");
for (i = ;i < ;i++) /* 输出a表 */
{
puts(a[i]);
}
printf("\n"); for (i = ;i < - ;i++)
{
for (j = ;j < - - i;j++)
{
if (strcmp(a[i], a[j]) < ) /* 字符串比较函数strcmp,若前者a[i]<后者a[j],函数值小于0 */
{
strcpy(t, a[i]); /* 字符串复制函数strcpy */
strcpy(a[i], a[j]);
strcpy(a[j], t);
}
}
} for (i = ;i < ;i++) /* 输出a表 */
{
puts(a[i]);
} system("pause");
}

例10.1

编写函数 slength(char * s),函数返回指针 s 所指字符串的长度,即相当于库函数 strlen 的功能。

 #include <stdio.h>

 int slength(char * s)
{
int n = ;
while (*(s + n) != '\0')
{
n++;
}
return n;
} main()
{
char str[] = "ABCDEF";
int len1, len2;
len1 = slength("");
len2 = slength(str);
printf("len1=%d,len2=%d\n", len1, len2);
}

例10.2

编写函数 scopy(char * s, char * t),将指针 t 所指的字符串复制到指针 s 所指的存储空间中。

 #include <stdio.h>

 void scopy(char * s, char * t)
{
int i = ;
while ((s[i] = t[i]) != '\0')
{
i++;
}
} main()
{
char str1[], str2[] = "ABCDEFGH";
scopy(str1, str2);
puts(str1);
}

例10.3

编写函数 scomp(char * s1, char * s2),将两个字符串 s1 和 s2 进行比较,若串 s1>串 s2,函数返回值为正数;若串 s1=串 s2,函数返回值为0;若串 s1<串 s2,函数返回值为负数。即相当于库函数strcmp的功能。

 #include <stdio.h>
int scomp(char * s1, char * s2)
{
int i = ;
while (s1[i] == s2[i] && s1[i])
{
i++;
}
return(s1[i] - s2[i]);
} main()
{
char str1[] = "ABC", str2[];
gets(str2);
if (scomp(str1, str2) > )
{
printf("str1>str2\n");
}
else if (scomp(str1, str2) < )
{
printf("str1<str2\n");
}
else
{
printf("str1=str2\n");
}
}

10.20

请编写函数,判断一字符串是否是回文。若是回文函数返回值为1;否则返回值为0。回文是顺读和倒读都一样的字符串。

 #include <stdio.h>
#include <string.h>
int ishuiwen(char * s)
{
int a;
int i = ;
int j = strlen(s) - ;
while (i < j&&s[i] == s[j])
{
i++;
j--;
}
if (i < j)
{
a = ;
}
else
{
a = ;
}
return a;
} main()
{
char str[];
scanf("%s", str);
if (ishuiwen(str))
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}

10.21

请编写函数,删除字符串中指定位置(下标)上的字符。删除成功函数返回被删字符;否则返回空置。

 #include <stdio.h>
#include <string.h>
char delchar(char * s, int pos)
{
int i = ;
char ch = s[pos];
if (pos >= strlen(s) || pos < )
{
return ;
}
for (i = pos;s[i];i++)
{
s[i] = s[i + ];
}
return ch;
} main()
{
char str[];
int pos;
gets(str);
scanf("%d", &pos);
if (delchar(str, pos))
{
puts(str);
}
else
{
printf("NO\n");
}
}

全国计算机等级考试二级教程-C语言程序设计_第10章_字符串的更多相关文章

  1. 全国计算机等级考试二级教程-C语言程序设计_第4章_选择结构

    switch什么时候用break,什么时候不用break 调用break:一次执行一个分支,输入一个数据,对应一个级别 不调用break:连续执行多个分支 if...else 可以处理任何情况,大于小 ...

  2. 全国计算机等级考试二级教程-C语言程序设计_第8章_地址和指针

    面试: unsigned int *p1 = &num; int *p2 = &num; #define _CRT_SECURE_NO_WARNINGS #include<std ...

  3. 全国计算机等级考试二级教程-C语言程序设计_第15章_位运算

    位运算,不适用于实数,仅仅适用于整数.字符. C语言的位运算只能操作整数.字符,实数是指数方式表示的,不适用于位运算. #define _CRT_SECURE_NO_WARNINGS #include ...

  4. 全国计算机等级考试二级教程-C语言程序设计_第9章_数组

    四维数组,可用于航天卫星,三维+时间 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> ...

  5. 全国计算机等级考试二级教程-C语言程序设计_第14章_结构体、共用体和用户定义类型

    函数的返回值是结构体类型 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> struct ...

  6. 全国计算机等级考试二级教程-C语言程序设计_第5章_循环结构

    for循环结构的嵌套 外层循环每循环一次,内层循环会完整循环一次. 外层循环是竖. 内层循环是横. for, do...while, while的选择: 如果有固定次数,如阶乘! ,判断素数,用 fo ...

  7. 全国计算机等级考试二级教程-C语言程序设计_第3章_顺序结构

    1输入两个整数给变量x和y:然后输出x和y:在交换x和y中的值后,在输出x和y. #include <stdio.h> main() { int x, y, t; printf(" ...

  8. 全国计算机等级考试二级教程-C语言程序设计_第2章_C程序设计的初步知识

    正负号与被除数一致. 3 % (-5) == 3 (-3) % 5 == -3 不用求余运算符,求出余数. int x, y; 答:x - x / y * y; const int i = 10; c ...

  9. 全国计算机等级考试二级教程-C语言程序设计_第7章_函数

    函数执行,从右到左执行 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> main() ...

随机推荐

  1. Azure上如何在Linux下挂载数据磁盘

    [原文首次发表于51cto http://cloudapps.blog.51cto.com/3136598/1653672] 在Azure上创建了虚拟机之后,我们在一些情况下会需要添加更多的数据磁盘来 ...

  2. Nginx 变量漫谈(七)

    在 (一) 中我们提到过,Nginx 变量的值只有一种类型,那就是字符串,但是变量也有可能压根就不存在有意义的值.没有值的变量也有两种特殊的值:一种是“不合法”(invalid),另一种是“没找到”( ...

  3. Oracle EBS-SQL (PO-16):检查采购订单完成情况统计.sql

    select         e.FULL_NAME                                                     采购员,         sum(plla ...

  4. Outlook2007、2010和Foxmail的簽名設計

    由於個人習慣問題公司大部分人採用第三方郵件工具,對與郵件的通訊設置大家完全可以通過嚮導完成,但是郵件的簽名設計往往隐藏了起来,现在就由我来带大家进行个性签名设计. Outlook2007 第一步: 点 ...

  5. [Django 1.5] jQuery/Ajax 在Django使用 ,如何更新模板里里变量

    最近希望实现一个页面局部刷新的功能,于是开始查阅ajax资料.幸好现在ajax很多功能都封装在jQuery这个库里面,我们可以很方便去调用.通过学习几个简单的小例子,可以实现简单的前端代码更新,还有重 ...

  6. openstack 使用cloud init 和 console-log, nbd或者libguestfs 获取VM中的硬件信息。

    以获取PCI的信息为例. 基本代码: pci.py import base64 import guestfs from functools import partial import os impor ...

  7. Hadoop源码解析之: HBase Security

    文不打算对这部分代码进行全面的解读,而是先对几个主要类的职能进行概述,然后再罗列一些有价值的重要细节. 第一部分:HBase Security 概述 HBase Security主要是基于User和U ...

  8. MinGW安装教程

    首先说明一下 1) MinGw只是其中一种GCC编译环境的安装程序,还有像Cygwin也是差不多的; 2) 由于安装的时候有些地方忘了截图,所以图有些是借鉴别人的; 3) 还要就是安装MinGw,最好 ...

  9. get方式中文乱码问题

    <a target="_blank" href="ftpFileAction!downloadFile.action?filename=测试.xml"&g ...

  10. 搭建PhoneGap for Android开发环境

    一.确保Android开发环境正常. 二.下载PhoneGap.可到http://www.phonegapcn.com/去下载,速度快些. 三.新建一个PhoneGap项目 1.在eclipse中新建 ...