字符串与数组编程

原创 2016年06月01日 21:17:45
//检测子串如abcd,bc,输出bc
//一定要注意指针的用法,千万不要乱用
const char* strStr(const char*src, const char* sub)
{
    //判断非空
    if (nullptr == src || nullptr == sub)
        return nullptr;
    while (*src)
    {
        const char*psrc = src, *psub = sub;
        do
        {
            if (!*psub)//如果到了sub的结束位置
                return src;
        } while (*psrc++==*psub++);
        src++;
    }
    return nullptr;
}

将字符串i am from shanghai,变成shanghai from am i

char* revStr(char *str)
{
    if (nullptr == str)
        return nullptr;
    char *start = str, *end = str, *pstr = str;
    while (*pstr++!='\0')
    {
        if (*pstr == ' ' || *pstr == '\0')
        {
            end = pstr - 1;
            while (start<end)//避免了一个字符的交换
            swap(*start++, *end--);
            start = end = pstr + 1;
        }   
    }
    //整体交换一次
    start = str, end = pstr - 2;
    while (start < end)
        swap(*start++, *end--);
    return str; 
}

在字符串中删除指定字符

char* deleteChar(char* str, char c)
{
    if (nullptr == str)
        return nullptr;
    char*start = str;
    char*head= str;
    while (*start)
    {
        if (*start!=c)//当其不是指定元素是赋值
        {
            *head++= *start;
        }
        start++;
    }
    *head = '\0';//注意
    return str;
}

在字符串的指定位置删除指定个数的字符

char* deleteChars(char* str, int pos,int len)
{
    if (nullptr == str)
        return nullptr;
    int tt = strlen(str);
    char* start = str + pos - 1;//开始位置
    char* end = start + len;//结束位置
    if ((len<1) || (start - str)>tt)
        return str;
    //画图去看他的情况
    if ((start + len-str) >tt )
    {
        *start= '\0';
        return str;
    }
    //循环赋值
    while (*end)
        *start++ = *end++;
    *start = '\0';
    return str;
}

字符串的循环右移

char*  loopMove(char* str, int n)
{
    if (nullptr == str)
        return nullptr;
    char* head = str;
    int len = strlen(str);
    int move_n = n%len;//要移动的位数,因为n很大时的做法
    char *p = str + len - move_n-1;//定位到该指针要移到末尾
    char* end = str + len - 1;
    char *temp = new char[n + 1];
    //先将最后到字符串头的元素去除
    for (int i = 0; i < move_n; i++)
        temp[i] = head[len-i-1];
    //循环移位
    for (int i = len-1; i >=n; i--)
        head[i]=head[i-n];
    //添加
    for (int i = 0; i < move_n; i++)
        head[i] = temp[move_n-i-1];
    return str;
}

两个串的最大公共子串

char *commonString(char* str1, char* str2)
{
    if (nullptr == str1 || nullptr == str2)
        return nullptr;
    int len1 = strlen(str1), len2 = strlen(str2);
    char *shortstr, *longstr, *substr;
    if (len1 >= len2)
    {
        longstr = str1;
        shortstr = str2;
    }
    else
    {
        longstr = str2;
        shortstr = str1;
    }
    if (strstr(longstr, shortstr) != nullptr)
        return shortstr;
    substr = new char[len2 + 1];
    //i是指示个数的参数,即将多少个元素复制到substr
    for (int i = len2 - 1; i > 0; i--)
    {
        //从那开始复制
        for (int j = 0; j <=len2 - 1; j++)
        {
            memcpy(substr, &shortstr[j], i);
            substr[i] = '\0';
            if (strstr(longstr, substr) != nullptr)
                return substr;
        }
    }
    return nullptr;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

字符数组与字符串的区别及联系

c字符数组以及字符串区别联系
  • u010731949
  • u010731949
  • 2015年05月02日 13:12
  • 3074

字符串与字符数组的区别

用字符数组和字符指针变量都可实现字符串的存储和运算。但是两者是有区别的。在使用时应注意以下几个问题: 1.字符串指针变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在以该首地址为首...
  • chenjieying12321
  • chenjieying12321
  • 2016年10月27日 15:22
  • 8601

关于字符串和数组的习题总结(补充)

1、编程实现对键盘输入的英文名句子进行加密。用加密方法为:当内容为英文字母时,用26字母中的其后三个字母代替该字母,若为其它字符时不变。比如245a95n加密后是245bcd95opq。(C语言) ...
  • zxl2016
  • zxl2016
  • 2016年07月14日 22:46
  • 488

char数组 、char指针与字符串常量的比较

数组不是基本类型,不能直接参与比较,数组与字符串及字符指针与字符串比较其实比较的是二者的地址。 例: int isequiv(char *t) { if (t == "char") return 1;...
  • zz460833359
  • zz460833359
  • 2015年09月30日 18:48
  • 2871

浅谈数组与指针表示字符串的区别

指针表示字符串 /1/指针变量所占内存空间根据操作系统的位数会发生变化,同一位数操作系统下是固定的,64位操作系统占8个字节; /2/当指针变量指向字符串时,不能改变字符串的值,因为字符串只存在常量区...
  • explore_zhang
  • explore_zhang
  • 2015年07月27日 18:08
  • 653

《C专家编程》:指针和数组的区别详解(四)

C语言编程新手常听到的说法之一就是“数组和指针是相同的”。不幸的是,这是一种非常危险的说法,并不完全正确。 一、什么是声明,什么是定义。 注意下面声明的区别: extern int...
  • gogoky
  • gogoky
  • 2016年05月24日 10:21
  • 1018

字符串和数组的解析

1、字符串 1)定义:由数字、字母、下划线组成的一串字符,编程语言中表示文本的数据类型。通常以串的整体作为操作对象。 2)定义字符串的方式: a.通过字符数组来定义字符串"HelloWorld"...
  • chen_geng
  • chen_geng
  • 2016年05月24日 14:56
  • 683

C专家编程--指针与数组(二) 数组 指针 联系

聊过数组和指针的区别,主要是对于数组和指针在内存中的访问方式加以区分,这篇博文则从更深层的角度剖析数组和指针的联系 如果你也对底层感兴趣、我向这篇文章会对你有所帮助, 什么时候数组和指针相同(When...
  • yusiguyuan
  • yusiguyuan
  • 2013年10月06日 20:58
  • 1095

面试考题之9.1:数组与字符串(C/C++版)

1.1  实现一个算法,确定一个字符串的所有字符是否全部不同。假如不允许使用额外的数据结构,又该如何处理? 解决方案:  C++ Code  1 2 3 4 5 6 7 8 9 10 1...
  • JohnnyHu90
  • JohnnyHu90
  • 2015年06月05日 12:44
  • 1675

Java实现字符串数组组合

/** * date: 2011-6-27 * author:pengxuan.lipx * remark:combine the adj keywords for lmsj */import jav...
  • lpxuan151009
  • lpxuan151009
  • 2011年06月27日 16:34
  • 2354
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:字符串与数组编程
举报原因:
原因补充:

(最多只允许输入30个字)