C语言复习-字符串与指针
C语言复习-字符串与指针
例一:
#include <stdio.h>
#include <string.h>
void removeComment(char *str)
{ char *p=str, *q;
while ((p=strstr(p, "/*")) != NULL)
{ q=strstr(p, "*/");
if (q != NULL)
strcpy(p, q+);
}
p = strstr(str, "//");
if (p !=NULL)
*p = '\0';
}
void main( )
{ char s[]="int c=4, /*c累计量*/ a=3; /*变量*/ // a初值为3";
removeComment(s);
printf("%s\n", s);
}
运行结果:
int c=, a=
本体关键在于复习两个重要函数strstr和strcpy
strstr:给定字符数组指针和待查找的字符串,strstr函数将从当前指针开始查找直到第一个遇见待查找字符串,并返回其地址,若未找到则返回NULL。
strcpy: 给定两个字符指针p和q,将把q所指向的内容复制到p所指向的内容。
例二:
str= ”int c=,/*c累计量*/ a=;/*变量*/ // a为3 ”
str= ”intccaa”
for(k=; k<strlen(str); k++)
if (str[k]>=‘a’&&str[k]<=‘z’
|| str[k]>=‘A’&&str[k]<=‘Z’)
// if (isalpha(str[k])) // 此函数隶属于 ctype.h
答案:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
void FilterNonAlpha(char *str)
{ int k, n=;
for(k=; k<strlen(str); k++)
if (str[k]>='a'&&str[k]<='z' || str[k]>='A'&&str[k]<='Z')
// if (isalpha(str[k]))
str[n++]=str[k];
str[n] = '\0'; /* 设置新的字符串尾
}
void main( )
{ char s[]="int c=4,/*c累计量*/ a=;/*变量*/ // a初值为3";
FilterNonAlpha(s);
printf("%s\n", s);
}
本题在于复习字符串扫描时的步进逻辑,核心语句是
str[n++]=str[k];
例三:
#include <stdio.h>
void main()
{ char s[], *p[];
int k=,n=;
gets(s);
p[] = s;
for(;s[k]; k++) // 中间是条件表达式,s[k]碰上末尾的'\0'会停下
if (s[k]==' ')
{ s[k]='\0'; n++;
p[n]=&s[k+];
}
for(k=n; k>=; k--) // 逆序打印
printf("%s ", p[k]);
}
这题需要注意的知识点包括:
- 指针数组的使用
- 指针数组的声明 char *p[100]
- 对指针数组中的元素赋值 p[n] = &s[k+1] p[0] = s
- gets()函数的使用
- for循环的特殊写法
例四:
#include <stdio.h>
#include <string.h>
void main()
{ char s1[],s2[],*p1[],*p2[];
int k,m,n1=,n2=, same=;
gets(s1); gets(s2);
p1[] = s1; p2[] = s2;
for(k=;s1[k]; k++)
if (s1[k]=='&')
{ s1[k]='\0'; n1++; p1[n1]=&s1[k+]; }
for(k=;s2[k]; k++)
if (s2[k]=='&')
{ s2[k]='\0'; n2++; p2[n2]=&s2[k+]; }
for(k=; k<=n1; k++)
for(m=; m<=n2; m++)
if (!strcmp(p1[k],p2[m])) same++;
printf("%d\n", same);
}
本题注意几点:
- 输入统统使用字符数组和gets()函数来接收,这样做有几点好处,一来简化scanf写法,二来字符数组可变,相比于静态字符串更加灵活。
- 每个单词的存储使用指针数组完成,包括如下几步1.创建适合大小的指针数组,可以暂时不初始化2.遍历特定字符数组时对指针数组中的元素采用取地址赋值。
C语言复习-字符串与指针的更多相关文章
- go语言之字符串、指针、数组、切片、结构struct、面向对象
一: 字符串 概述: Go 语言将字符串作为 种原生的基本数据类型,字 符串的初始化可以使用字符串字面量. (1)字符串是常量,可以通过类 数组 索引访问其字节单元,但是不能修改某个字节的值 (2)宇 ...
- C语言程序设计--字符串与指针及数组与指针
数组的基本知识 数组的定义 #define SIZE 5 int array_int[5]; //未声明初始化,默认填零 float array_float[5] = {1.01, 2.23, 3.1 ...
- C语言复习---零散补充
一:double和float使用scanf获取数据 printf输出float和double都可以用%f,double还可以用%lf. 2 scanf输入float用%f,double输入用%lf,不 ...
- C语言基础 (9) 数组指针
复习 只要把地址拿到就能这么操作.. (这里是合法的地址,不是野指针) 只有定义变量后,此变量的地址才是合法的地址 野指针就是保存没有意义地址的指针变量 操作野指针变量本身不会有任何问题 操作野指针所 ...
- C++_系列自学课程_第_9_课_C语言风格字符串_《C++ Primer 第四版》
前面说了写关于数组和指针的内容,这次在这里讨论一下字符串,讨论一下C语言风格的字符串. 在C语言里面我们利用字符数组来对字符串进行处理, 在C++里面我们前面说过一种类类型string可以对字符串进行 ...
- 《C语言学习笔记》指针数组及其应用
C语言中,最灵活但又容易出错的莫过于指针了.而指针数组,是在C中很常见的一个应用.指针数组的意思是说,这个数组存储的所有对象都为指针.除了存储对象为指针,即一个地址外,其它操作和普通数组完全一样. # ...
- C语言精要总结-指针系列(二)
此文为指针系列第二篇: C语言精要总结-指针系列(一) C语言精要总结-指针系列(二) 指针运算 前面提到过指针的解引用运算,除此之外,指针还能进行部分算数运算.关系运算 指针能进行的有意义的算术运算 ...
- C语言面试题分类->指针
有关指针的经典面试题 C语言为何如此长寿并实用?C++为什么有那么多精彩?指针可以说是C/C++中的灵魂所在,虽然早期中pascal也有指针,但是和C/C++比起来不是一个级别的.今天为大家深入浅出的 ...
- C语言复习:文件操作
文件操作专题 C语言文件读写概念 文件分类 按文件的逻辑结构: 记录文件:由具有一定结构的记录组成(定长和不定长) 流式文件:由一个个字符(字节)数据顺序组成 按存储介质: 普通文件:存储介质文件(磁 ...
随机推荐
- 第七章 vuex专题
一.Vuex安装 一般在创建项目是会选择 Vuex,如果没有选择: cnpm install vuex --save 使用: import Vuex from "vuex"; V ...
- [转]Maven类包冲突终极三大解决技巧
举例 A依赖于B及C,而B又依赖于X.Y,而C依赖于X.M,则A除引B及C的依赖包下,还会引入X,Y,M的依赖包(一般情况下了,Maven可通过<scope>等若干种方式控制传递依赖).这 ...
- nvidia-smi:控制您的GPU
翻译 https://www.microway.com/hpc-tech-tips/nvidia-smi_control-your-gpus/ 大多数用户知道如何检查其CPU的状态,查看多少系统内存 ...
- Chrome自动格式化Json输出
对JSON格式的内容进行浏览和编辑,以树形图样式展现JSON文档,并可实时编辑 安装 Chrome商店 https://chrome.google.com/webstore/detail/json-h ...
- 15、Java中级进阶 面向对象 继承
1.何为面向对象 其本质是以建立模型体现出来的抽象思维过程和面向对象的方法(百度百科)是一种编程思维,也是一种思考问题的方式 如何建立面向对象的思维呢?1.先整体,再局部2.先抽象,再具体3.能做什么 ...
- Good-turning估计
在学习NLP过程中,遇到了Good-turning的介绍,网上找了相关的资料查看,总结如下. 思想: 其主要思想是从概率的总量中分配少量的比例给零概率项. 思路: 假定给定的语料库中出现 \(r\)次 ...
- C#LeetCode刷题之#830-较大分组的位置(Positions of Large Groups)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3750 访问. 在一个由小写字母构成的字符串 S 中,包含由一些连 ...
- PowerJob 的自实现高可用方案,妙妙妙!
本文适合有 Java 基础知识的人群 作者:HelloGitHub-Salieri HelloGitHub 推出的<讲解开源项目>系列. 碎碎念 高可用放到今天已经不是一个新颖的词汇了,怎 ...
- Linux下安装Readis
Redis的官方下载网址是:http://redis.io/download (这里下载的是Linux版的Redis源码包) Redis服务器端的默认端口是6379. 首先我们先把整体的流程先书写下 ...
- 手把手教你在win10下搭建pytorch GPU环境(Anaconda+Pycharm)
Anaconda指的是一个开源的Python发行版本,其主要优点如下: Anaconda默认安装了常见的科学计算包,用它搭建起Python环境后不用再费时费力安装这些包: Anaconda可以创建互相 ...