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> # ...
随机推荐
- bzoj3143
之前我们曾经用dp解决过数学期望问题,这次我们用的是解方程的方法首先在编号之前,肯定要求出每条边的期望经过次数然后可以转化为求边端点的期望次数这种做法我一开始接触是noip2013的初赛问题求解,是类 ...
- 直接拿来用!最火的android开源项目(一)
不好意思尊重一下作者咯.详情见:csdn:http://www.csdn.net/article/2013-05-03/2815127-Android-open-source-projects
- 配置Myeclipse中的项目部署到服务器,报the selected server is enabled, but is not configured properly.
the selected server is enabled, but is not configured properly. deployment to it will not be permitt ...
- iOS动态管理AutoLayout的约束NSLayoutConstraint
除了使用Storyboard之外,也可以使用使用代码的方式,动态的向指定的UIView,添加约束. 例如有两个UILabel:someLabel,otherLabel 首先用代码实例化,两个控件 se ...
- [zz]android的logcat详细用法
Android日志系统提供了记录和查看系统调试信息的功能.日志都是从各种软件和一些系统的缓冲区中记录下来的,缓冲区可以通过 logcat 命令来查看和使用. 一.使用logcat命令的目的: ...
- content
http://www.cnblogs.com/lrysjtu/p/4474900.html lexus - 博客园 http://www.cnblogs.com/rio2607/p/4472456.h ...
- Just a Hook
Just a Hook 题目大意:原来有N个铜棍, 一个人有种能力可以把一个区间的棍变成铜,银或者金的,价值分别是1,2,3, 最后求出总价值,没啥好说的,赤裸裸的线段树: Time Limit ...
- winform 跨窗体给控件传值 分类: WinForm 2014-08-02 16:33 195人阅读 评论(0) 收藏
两个窗体 FormA,FormB; FormA窗体中有一文本框控件:TextBox; FormB窗体中有一变量:txtJSJ 目的:把变量赋值给文本框 实现: 设置TextBox属性: Modifie ...
- windows下安装pip
1.在安装pip前,请确认win系统中已经安装好了python,和easy_install工具,如果系统安装成功,easy_install在目录C:\Python27\Scripts 下面,确认截图如 ...
- CMake高速入门
入门基础:http://www.ibm.com/developerworks/cn/linux/l-cn-cmake/ 在 linux 下使用 CMake 构建应用程序 入门进阶:http ...