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();
}
posted @ 2015-09-18 16:42  拨云见日视野  阅读(546)  评论(0编辑  收藏  举报