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语言文件读写概念 文件分类 按文件的逻辑结构: 记录文件:由具有一定结构的记录组成(定长和不定长) 流式文件:由一个个字符(字节)数据顺序组成 按存储介质: 普通文件:存储介质文件(磁 ...
随机推荐
- 将"089,0760,009"变为 89,760,9
remove_zeros = lambda s: ','.join(map(lambda sub: str(int(sub)), s.split(','))) remove_zeros("0 ...
- PHP lstat() 函数
定义和用法 lstat() 函数返回关于文件或符号连接的信息. 该函数将返回一个包含下列元素的数组: [0] 或 [dev] - 设备编号 [1] 或 [ino] - inode 编号 [2] 或 [ ...
- PHP similar_text() 函数
实例 计算两个字符串的相似度并返回匹配字符的数目: <?php高佣联盟 www.cgewang.comecho similar_text("Hello World",&quo ...
- PHP PDO连接
连接是通过创建 PDO 基类的实例而建立的.不管使用哪种驱动程序,都是用 PDO 类名. 连接到 MySQL <?php高佣联盟 www.cgewang.com $dbh = new PDO(' ...
- PHP addcslashes() 函数
实例 在字符 "W" 前添加反斜杠: <?php 高佣联盟 www.cgewang.com$str = addcslashes("Hello World!" ...
- 一个轻量级的基于RateLimiter的分布式限流实现
上篇文章(限流算法与Guava RateLimiter解析)对常用的限流算法及Google Guava基于令牌桶算法的实现RateLimiter进行了介绍.RateLimiter通过线程锁控制同步,只 ...
- vue做多行滚动广告牌
利用vue可以很方便的做滚动广告屏,结合前端和vue,废话不多说,直接上代码 1.前端 <div class="notice"> <div class=" ...
- 如何优雅的设计 Spring Boot API 接口版本号
原文:https://blog.mariojd.cn/how-to-design-spring-boot-api-version-number-elegantly.html 一般来说,系统上线以后,需 ...
- DataGrip 2020.1 安装与激活
1 软件下载 百度网盘: 链接:https://pan.baidu.com/s/1kHSq1XS0i4YDF0HuzsxCLg 提取码:djyc 2 安装 解压文件后点击 datagrip-2020. ...
- MySQL索引结构原理分析
我们在学习MySQL的时候经常会听到索引这个词,大概也知道这是什么,但是深究下去又说不出什么道道来.下面将会比较全面的介绍一下关于索引! 1 索引是什么? 这里用百度百科的一句话来说,在关系数据库中, ...