c语言字符数组和指针的经典用法
1.字符数组
许多情况下,对字符串的处理使用字符数组会更加方便,比如:
我觉得不改变字符串的原有顺序,对字符串进行删除等操作时,使用字符数组效果会更好。
eg:给定字符串(ASCII码0-255)数组,请在不开辟额外空间的情况下删除开始和结尾处的空格,并将中间的多个连续的空格合并成一个。例如:" i am a little boy. ",变成"i am a little boy",语言不限,但不要用伪代码作答.
answer:
#include <iostream>
#include <string>
using namespace std;
string FormatString(char str[], int len)
{
//if (str == NULL || len <= 0)
//return;
int i = 0, j = 0;
while (str[i] == ' ')//开头的空格,通过移动索引达到删除空格的目的
i++;
while (str[i] != '\0')
{
if (str[i] == ' ' && (str[i + 1] == ' ' || str[i + 1] == '\0'))//中间或者结尾的空格,判断是否有两个空格或者结尾了。用i和i+1体现了数组索引的用途
{
i++;
continue;
}
str[j++] = str[i++]; //程序核心,通过索引完成删除空格的操作,j是小于等于i的。
}
str[j] = '\0';
return str;
}
void main()
{
char ch[] = "i e.";
cout << FormatString(ch,5);
system("pause");
}
2.指针操作
在对字符串的移动进行操作时,使用指针往往会更加方便。
eg:
字符串中的所有数字字符移到所有非数字字符之后,并保持数字字符串和非数字字符串原有的先后次序。例如,def35adh3kjsdf7,输出为defadhkjsdf3537。
answer:
#include <stdio.h>
void main()
{
char buf[256];
char *p=buf; //两个指针,一个负责遍历操作,一个负责存放操作后的字符串
char *q=buf;
char ch;
printf("Please input a string:");
scanf("%s", buf);
while(*p)
{
while(*p<'0'||*p>'9')p++;/*找到第一个数字*/
q=p;
while(*q>='0' && *q<='9')q++;/*找到数字后面的第一个非数字的字符*/
if(*q==0) break;/*后面都是数字,退出*/ ch=*q; //把要移动的字符放在临时变量ch中
while(q>p)
{
*q=*(q-1); //把ch中的字符移到数字前面
q--;
}
*q=ch; //实现了把字符放在数字前面
}
printf("Output string: %s\n",buf);
printf("Press any key to exit.\n");
getch();
}
c语言字符数组和指针的经典用法的更多相关文章
- C语言 字符数组与字符指针比较
C语言 字符数组与字符指针比较 #include<stdio.h> /* 字符数组会在定以后预先分配内存空间字符串是常量所以会直接把字符串拷贝到数组中, 因为数组地址不同,所以不相等· 字 ...
- C语言中数组与指针的异同之处!你不知道的编程奥秘~
C语言的数组和指针一直是两个容易混淆的东西,当初在学习的时候,也许为了通过考试会对指针和数组的一些考点进行突击,但是很多极其细节的东西也许并不是那么清楚.本篇侧重点在于分析数组与指针的关系,什么时候数 ...
- C语言字符数组超细讲解
看到标题,有不少朋友会想:字符数组不也是数组吗?为什么要单独拿出来讲哩?莫非它是朵奇葩? 哈哈,确实,一起来认识一下这朵数组界的奇葩吧! 一.字符数组的定义.引用.初始化 大家好!我是字符数组,看我的 ...
- [c语言]字符数组、字符串定义
C语言中字符串通常用字符指针和字符数组来定义: char* pS="abcdef"; char s[]="abcdef"; 这两种方式都会在结尾为字符串隐式补结 ...
- c语言字符数组与字符串的使用详解
转自:http://www.jb51.net/article/37456.htm 1.字符数组的定义与初始化字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素.char str[10]={ ...
- C 语言字符数组的定义与初始化
1.字符数组的定义与初始化字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素.char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y'} ...
- c语言字符数组的初始化问题
1.字符数组的定义与初始化 字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素. char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y ...
- C语言之数组与指针的易混淆知识点
一.指针与数组 指针:指针本身也是一个变量,它的内容是指向的内容的地址.指针同样有类型的区分,char 的指针只能指向char型数据,int 指针指向int型数据.但是指针所占内存单元的大小(即其内容 ...
- (四)C语言柔性数组、指针赋值
一.柔性数组 今天看了公司的代码,发现一个很奇怪的问题,后来自己写了类似代码,我先把代码贴出来吧. #include<stdio.h> #include<string.h> # ...
随机推荐
- bzoj1211
prufer码水题(n-2)!/[(d1-1)!*(d2-1)!*…*(dn-1)!] ..] of longint; x,n,i,j,s:longint; ans:int64; begin read ...
- C#处理四舍五入的问题
在处理一些数据时,我们希望能用“四舍五入”法实现,但是C#采用的是“四舍六入五成双”的方法,如下面的例子,就是用“四舍六入五成双”得到的结果: double d1 = Math.Round(1.25, ...
- CnPack for delphi xe5
CnPack Team is made up of Chinese Programmers and Delphi / C++ Builder fans across the Internet. Our ...
- Unity3d 使用DX11的曲面细分
Unity3d surface Shaderswith DX11 Tessellation Unity3d surface shader 在DX11上的曲面细分 I write this articl ...
- stringstream 与空格 (大家讨论一下代码结果的原因)
#include <iostream> // std::cout, std::endl #include <iomanip> // std::setw #include < ...
- 3D FPS游戏中Player摄像机的运动
最近遇到一些类似3D FPS的game play.针对这里面Player摄像机的运动的问题,随便总结一些东西以备参考.首先,对问题做一些的假设: Player摄像机在多数情况下在场景中的位置是固定的, ...
- 自动化运维工具Ansible详细部署 - 人生理想在于坚持不懈 - 51CTO技术博客
自动化运维工具Ansible详细部署 - 人生理想在于坚持不懈 - 51CTO技术博客 自动化运维工具Ansible详细部署
- mysql常用总结
用户管理mysql>use mysql;查看mysql> select host,user,password from user ;创建mysql> create user zx_r ...
- matlab初学者_脚本文件调用函数文件
问题: matlab里面有两种文件,一种是脚本文件,一种是函数文件,为了模块化程序,我们需要把专门的功能写成一个函数封装到某个函数文件里面. 那么来看如何在脚本文件里调用函数文件中的函数. 注意点: ...
- 每天一个JavaScript实例-从一个div元素删除一个段落
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...