c字符数组之两头堵模型
- char *其实就是char[length]的首元素地址 实验环境:centos7下qt5.11 中文char类型占3个字节
char[length]="特别车队"其实等价于char *mywords="特别车队"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char * words=" 特别车队狮哥猴警官老狒 ";
int i,j=;
j=strlen(words)-;
while(isspace(words[i]) && words[i]!='\0')
{
i++;
}
while(isspace(words[j]) && words[j]!='\0')
{
j--;
}
int n=j-i; printf("%d\n",n);
while(i<=j){
printf("%c",words[i]);
i++;
}
printf("\n%s\n",words);
return ;
}
- 一个去除首尾空格的例子
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char *wants=" 石锅拌饭和辣牛肉汤想吃了斯密达 ";
int i,j=;
j=strlen(wants)-;
while(isspace(wants[i]))
{
i++;
}
while(isspace(wants[j]))
{
j--;
}
int n=j-i+;
char puluosimiga[]={};//显示分配内存空间,在栈区,如果不做这步将无法复制字符
wants+=i;
strncpy(puluosimiga,wants,n);
puluosimiga[j]='\0';
printf("%d\n",n);
printf("%s\n",puluosimiga);
return ;
}

- 字符串逆序一切看似完美无缺实则已经出错
#include<stdio.h>
#include<string.h>
int main()
{
char *words=" plz check the number or you call again ";//造成问题的原因是,这样一来就生成了一个常量,其值不可修改
int lenofwords=strlen(words)-;
printf("%p\n",words);
char *p=words+lenofwords;
printf("%p\n",lenofwords);
int i=;
while(words<p)
{
char temp=*words;
*words=*p;
*p=temp;
p--;
words++;
}
printf("%s\n",words);
return ;
}
- 解决办法,声明一个字符数组就相当于在栈上显示开辟了空间,其值即可修改
#include<stdio.h>
#include<string.h>
#include<locale.h>
#include<stdlib.h> int main()
{
char mywords[]="spending my time,my time, my time";
char *p=mywords;
char *q = p+strlen(mywords)-;
while(p<q)
{
char temp =*p;
*p=*q;
*q=temp;
q--;
p++;
}
printf("%s\n",mywords);
return ;
}
输出结果:

- 利用递归函数的压栈和出栈特性----字符数组的每一个元素随着函数的调用压栈,函数执行完毕,层层返回是出栈,出栈时打印元素
#include<stdio.h>
#include<string.h>
#include<locale.h>
#include<stdlib.h> void getnewords(char *p,char* dest)
{
if(p==NULL)
{
return;
}
if(*p=='\0')
{
return;
} getnewords(p+,dest+);
*dest=*p;
printf("%c",*p);
} int main()
{
char mywords[]="spending my time,my time, my time";
char *p=mywords;
char mydest[]={};
char *q=mydest;
//memset(q,0,sizeof(mywords));
getnewords(p,q);
printf("\n赋值后的数组%s",mydest);
return ;
}
输出结果:

压栈的效果出来了,而我们期待的字符逆序输出并未实现,你能猜到为什么吗?
逆序打印出了字符,赋值是从后往前(目标数组的从后往前),而打印数组的值的时候是从前往后。
如何返回字符数组(字符串)逆序?解决方案------通过:strncat()函数完成数组连接
#include<stdio.h>
#include<string.h>
#include<locale.h>
#include<stdlib.h> void getnewords(char *p,char* dest)
{
if(p==NULL)
{
return;
}
if(*p=='\0')
{
return;
}
getnewords(p+,dest);
strncat(dest,p,);
//printf("%c",*p);
} int main()
{
char src[]="I don't like the drugs, but the drugs like me";
char dest[]={};
printf("\nbefore:%s\n",dest);
printf("\n%s\n","==================");
getnewords(src,dest);
printf("\nfinally:%s\n",dest);
return ;
}
输出结果:

c字符数组之两头堵模型的更多相关文章
- C语言 字符串操作两头堵模型
//字符串操作两头堵模型练习 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #inc ...
- Base-64 字符数组或字符串的长度无效等问题解决方案
项目特殊需要,调用ActiveX三维控件进行控件某一特殊部位的截图操作,这个截图保存由ActiveX控件控制保存到本地是没问题的,现在需要将这个截图上传到服务器,多人共享,就牵扯到需要读取本地文件…… ...
- 进制转换( C++字符数组 )
注: 较为简便的方法是用 整型(int)或浮点型(long.double 注意:该类型不一定能够准确存储数据) 来存放待转换的数值,可直接取余得到每一位数值 较为稳定的方法是用 字符数组储存待转换的数 ...
- 字符数组和string判断是否为空行 NULL和0 namespace变量需要自己进行初始化
string 可以这样判断空行input !="" 字符数组可以通过判断第一个元素是否为空字符'\0',是的话为空行arrar[0]=='\0':或者用长度strlen(char ...
- strlen 字符型数组和字符数组 sizeof和strlen的区别 cin.get(input,Arsize)
strlenstrlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值 ...
- [c语言]字符数组、字符串定义
C语言中字符串通常用字符指针和字符数组来定义: char* pS="abcdef"; char s[]="abcdef"; 这两种方式都会在结尾为字符串隐式补结 ...
- 计算字符数组长度,用strlen 与 sizeof 的原理与区别
遇到个坑,定义了一个字符数组 unsigned ;i<;i++) { buff[i] = ; } 然后用串口发送函数: write(fd, buff, strlen(buff)); 却发现串口一 ...
- Delphi字符串与字符数组之间的转换(初始化的重要性)
紧接着上篇博客讲解的内容: 将Char型数组转换为string类型还有下面的这种方法 但是我在测试的时候遇到了一些问题,并在下面进行了解释和总结 先说出我的总结 其实我们在学习编程的时候(比如我之前学 ...
- Delphi的字符串、PChar和字符数组之间的转换
参考:http://my.oschina.net/kavensu/blog/193719 以下的各种方法都是我在Delphi 6的环境下测试成功的,可能根据你的开发环境.不同的上下文语境……有一些可能 ...
随机推荐
- Docker的基础教程(基于CentOS)
1.查看版本 Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker . 通过 uname -r 命令查看你当前的内核 ...
- SpringBoot自动配置原理学习
介绍 构建Springboot项目时我们会创建一个启动类 @SpringBootApplication public class DemoApplication { public static voi ...
- 题解 Luogu P3959 【宝藏】
来一篇不那么慢的状压??? 话说这题根本没有紫题难度吧,数据还那么水 我是不会告诉你我被hack了 一看数据规模,n≤12,果断状压. 然后起点要枚举,就设dp状态: f[i][j]=以i为起点到j状 ...
- python 之 Django框架(模板系统、过滤器、simple_tag、inclusion_tag、Tags、母版、组件)
12.35 Django模板系统 {{ }}和 {% %},变量相关的用{{}},逻辑相关的用{%%} app02/views: # 模板语言测试函数 def template_test(reques ...
- linux shell程序常用功能
一.循环读取文件 循环读取文件方式有多种,推荐下列方法 while read line;do local include=$(echo ${line} | grep "filter" ...
- mysql 免费的图形管理工具
在学习go语言开发时,使用了mysql 使用了两天mysql命令行,感觉实在是无法忍受, 找到了一个免费好用的 图形数据库管理工具SQLyog Professional 版本: 注册名:luoye25 ...
- Js学习03--数据类型
一.数据类型 1.Js中常用的数据类型 简单数据类型 Number 数字类型 String 字符串类型 Boolean 布尔类型 Undefined 变量未初始化 Null 空类型 复杂数据 ...
- C# vb实现浮雕特效滤镜效果
在.net中,如何简单快捷地实现Photoshop滤镜组中的浮雕效果呢?答案是调用SharpImage!专业图像特效滤镜和合成类库.下面开始演示关键代码,您也可以在文末下载全部源码: 设置授权 第一步 ...
- PLSQL登录失败出现空白错误提示框的问题
安装win7后其他软件运行正常,可是数据库用cmd plsplus和plsql软件都连不上,plsql报一个空白提示框 重装n遍oracle客户端,都不行. 最后发现解决方式很简单,在plsql的图标 ...
- H3C S3600V2 通过CONSOLE配置端口镜像
前24口为百兆口 对应序号为 Ethernet 1/0/(0~24) 25 26为千兆口 对应序号为 GigabitEthernet 1/0/(25~26) 以下是通过25号千兆口监听1号百兆口的例子 ...