字符串

作者: 去留无意hmy | 来源:发表于2017-07-13 19:52 被阅读4次

Problem Statement
For a given source string and a target string, you should output the first
index(from 0) of target string in source string.If target does not exist in source, just return -1.(寻找目标字符串在源字符串中出现的位置)
Example
If source = "source" and target = "target", return -1.
If source = "abcdabcdefg" and target = "bcd", return 1.(从零开始,bdc在第二位置,故输出1);

int strStr(char* haystack, char* needle) {
    
    if(haystack ==NULL|| needle ==NULL)
        return -1;
    const int strl_h=strlen(haystack);
    const int strl_n=strlen(needle);
    
    int i,j=0;
    for (i=0;i<strl_h-strl_n+1;i++)
    {
        for (j=0;j<strl_n;j++)
        {
            if(haystack[i+j]!=needle[j])    
//如果找到相同的字符,则继续查找下一个相同的字符,直到查找到所有相同的字符,此时j=strl_n;
//如果第一个字符不相同,则break,跳出第二个for循环
                break;
        }
        if (j==strl_n) 
            return i;
    }
    return -1;
    
}

形参使用char 型指针变量,调用开始形参指向字符数组的首地址。

  • 整理课程列表

冬瓜同学平时十分喜欢在实验楼学习新课程,每学完一节课就会将其记下。当学会的编程语言多了,就想整理汇总一下,看看自己的技术栈。为了有序排列所有的编程语言,冬瓜决定使用冒泡排序对其进行排列。而字符串的比较方法使用的是字典序。

#include<stdio.h>
#include<string.h>

char *courses[]={"C","C++","PHP","COBOL","ASP.NET","C#","JAVA","BASIC","PASCAL","ASP"};
void sort(char *p[],int n)
{
    char *tmp;
    int i,j,k;
    for(i=0;i<n;++i){
        k=i;
        for(j=i;j<n;++j){
            if(strcmp(p[j],p[k])<0)    
//查找最小的字符串,首先以第一个作为最小字符串,然后以此比较找到最小的然后将1号字符串与找到的 
//最小的字符串交换,结束第一轮比较。然后以第二个字符串作为最小的以此次比较查找到第二小的字符串,
//然后将第二小字符串与2号位字符串交换,以次排序。
                k=j;
        }
       // if(k!=j)
        {
            tmp=p[k];
            p[k]=p[i];
            p[i]=tmp;
        }
    }
 } 
 int main()
 {
    int n=sizeof(courses)/sizeof(char *);
    sort(courses,n);
    int i;
    for(i=0;i<n;++i)
    {
        printf("%s\n",courses[i]);

     }
     return 0;
 }

注意:数组指针与指针数组
char *courses[3],由于[]的优先级高于*,因此courses先与[]结合构成数组,数组元素类型为(char *),故其为指针数组。
char (*courses)[3]
与courses结合表明其是一个指针,在于后面的[3]结合,申明其为一个包含4个元素数组的指针。故其为数组指针,即指向数组的指针。
下图是二者在内存中区别:

数组指针与指针数组

参考文献

【1】实验楼-整理课程列表 (https://www.shiyanlou.com/contests/lou4/console
【2】C语言指针数组和数组指针(http://c.biancheng.net/cpp/html/476.html
【3】实验楼-经典算法解题实战 字符串(一)(https://www.shiyanlou.com/courses/492

相关文章

  • Javascript知识点整合

    字符串 单行字符串: ‘字符串’或“字符串” 多行字符串: `多行字符串` 字符串操作: 字符串连接‘+’号 长度...

  • C++基础字符串

    字符串的构造 字符串特性描述 字符操作 字符串赋值 字符串连接 字符串比较 字符串查找 字符串替换 字符串删除 字...

  • iOS中的NSString与NSMutableString

    字符串的创建 字符串读写 字符串的比较 字符串的搜索 字符串截取 字符串替换 字符串与路径 字符串转换 NSMut...

  • iOS NSString用法总结

    字符串属性 字符串截取 字符串比较 字符串搜索 字符串拼接 字符串基本类型转换 字符串分行,分段 字符串列举(按条...

  • php 字符串常见方法汇总

    字符串拼接 字符串检索 字符串截取 字符串替换 字符串大小写转化 字符串转数组 字符串格式化

  • iOS 字符串截取、iOS 字符串替换、iOS 字符串分隔、iO

    iOS之字符串截取、iOS 字符串替换、iOS字符串分隔、iOS之字符串匹配、截取字符串、匹配字符串、分隔字符串 ...

  • PHP中字符串函数库常用函数解析 -- PHP 学习 (十一)

    常用字符串函数分类: 字符串长度, 字符串查找, 字符串大小写转换, 字符串截取, 字符串 ASCII, 字符串加...

  • Kotlin语言(二):字符串类型

    1、字符串定义 2、字符串删除空格 3、字符串比较 4、字符串切割 5、字符串截取 6、字符串替换 7、字符串模板

  • 字符串扩展

    求字符串大小 字符串解码、转换 字符串截取 字符串汉字处理 字符串 Mac地址 字符串进制转换

  • 2020-09-30字符串

    day8-字符串 字符串的操作 in 和 not in字符串1 in 字符串2 - 判断字符串1是否是字符串...

网友评论

      本文标题:字符串

      本文链接:https://www.haomeiwen.com/subject/mrrwhxtx.html