• C——字符串练习


    1.查找一个字符在字符串1中出现的所有字符位置,

    比如:

    输入

    asdfwd

    d

    输出为

    3

    6

    输入

    hhff

    h

    输出为

    1

    2

     1 #include <string.h>
     2 int main(int args,const char *argv[])
     3 {
     4     char a[100] = "sgfgeasdefw";
     5     char target ;
     6     scanf("%c",&target);
     7     char *p = a;
     8     while((p=strchr(p, target)))
     9     {
    10         printf("%ld
    ",p-a+1);
    11         p++;
    12     }
    13 }

    2.比较一个字符串2在字符串1中是否存在,如果存在输出Y,否则输出N

    比如:

    输入

    asdfwd

    dfw

    输出为

    Y

     输入

    sgfgeasdfw

    hhff

    输出为

    N

     1 #include <string.h>
     2 int main(int args,const char *argv[])
     3 {
     4     char a[100] = "sgfgeasdfw";
     5     const char *b = "ge";
     6     //传入的第二个参数,虽然是一个字符串,但是会自动解析位对应的每一个字符,之后判断a字符串中出现的第一个位置
     7     //strtok(a, b);
     8     //strstr(const char *,const char *);返回的是子字符串中出现的第一个位置
     9     if(strstr(a, b))
    10     {
    11         printf("Y");
    12     }else{
    13         printf("N");
    14     }
    15 }

     3.查找一个字符串2在字符串1中出现的次数,

    比如:

    输入

    asdfwd

    d

    输出为

    2

    输入

    hhff

    h

    输出为

    2

     1 #include <string.h>
     2 int main(int args,const char *argv[])
     3 {
     4     char *src = "asfdasdfassdf";
     5     char target[100] = {};
     6     scanf("%s",target);
     7     int cnt = 0;
     8     char *p = src;
     9     while((p=strstr(p, target)))
    10     {
    11         cnt++;
    12         p++;
    13     }
    14     printf("出现的次数:%d",cnt);
    15     return 0;
    16 }

    4.

    给定一个任意字符串,然后将该字符串逆序输出。

    比如:

    输入

    asdfwd

    输出为

    dwfdsa

     1 #include <string.h>
     2 char *reverse(char *a)
     3 {
     4     int len = (int)strlen(a);
     5     char b[100] = {0};
     6     for(int i=len-1;i>=0;i--)
     7     {
     8         b[len-i-1] = a[i];
     9     }
    10     char *res = b;
    11     return res;
    12 }
    13 int main(int args,const char *argv[])
    14 {
    15     char *a = "afdasfas";
    16     char *res = reverse(a);
    17     printf("%s",res);
    18     return 0;
    19 }
    View Code

     5.题目描述:“eeeeeaaaff" 压缩为 "e5a3f2",请编程实现

    这题有一个比较尴尬的地方是,假如字符串是是“abc”,那么如果化成“a1b1c1”超过了原来字符串的长度,又题目给的是原地,我们假设字符串原长度就是题目给的那么长,那么就没办法了,所以如果遇到单个字母的后面不加1

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<stdlib.h>
     4 
     5 void condense( char * src_str)
     6 {
     7     if(src_str==NULL)
     8         return ;
     9 
    10     int count=1;
    11     int sub_length=1;
    12     for(int i=1;i<strlen(src_str);i++)
    13     {
    14         if(src_str[i]==src_str[i-1])
    15         {
    16             count++;
    17         }
    18         else
    19         {
    20             if(count==1)
    21             {
    22                 src_str[sub_length++]=src_str[i]; //单个只要赋值
    23             }
    24             else
    25             {
    26                 src_str[sub_length++]=count+48; //多个要加上数字,+48变成ascii码
    27                 src_str[sub_length++]=src_str[i];
    28                 count=1;
    29             }
    30         }
    31     }
    32 
    33     if(sub_length<strlen(src_str))
    34         src_str[sub_length]='';
    35 
    36     printf("%s 
    ",src_str);
    37 
    38     
    39 }
    40 
    41 int main()
    42 {
    43     char str[]="abbbdffeeg";
    44     condense(str);
    45     getchar();
    46     return 0;
    47 }
    View Code

     6.题目描述:“eeeeeaaaff" 压缩为 "e5a3f2",并用一个字符串存储,通过子函数实现,结果用指针函数返回,请编程实现

     1 #include <string.h>
     2 #include <ctype.h>
     3 char *getStringToCompress(char *src)
     4 {
     5     char compress[100] = {};
     6     int cnt = 0;
     7     char *psrc = src;
     8     char al[100] = {};
     9     int num[100] = {0};
    10     int i = 0;
    11     while(*psrc)
    12     {
    13         cnt++;
    14         if(*psrc != *(psrc+1))
    15         {
    16             num[i] = cnt;
    17             al[i] = *psrc;
    18             cnt = 0;
    19             i++;
    20         }
    21         psrc++;
    22     }
    23     int len = (int)strlen(al);
    24     char buf[100] = "";
    25     //将保持在al和num数组中的元素转换成字符数组,保持到compress字符数组中
    26     for(int h=0;h<len;h++)
    27     {
    28         if (isalpha(al[h])) {
    29             sprintf(buf, "%c", al[h]); //利用sprintf(char *buf,const char *format,argument,...)将字符转位字符串类型
    30             strcat(compress, buf);
    31         }
    32         if (!isalpha(num[h])) {
    33             sprintf(buf, "%d", num[h]); //利用sprintf()函数将数字转换为
    34             strcat(compress, buf);
    35         }
    36     }
    37     char * res = compress;
    38     return res;
    39 }
    40 int main(int args,const char *argv[])
    41 {
    42     char src[100] = "eeeeeaaaaaaaaaaaff";
    43     char *compress = getStringToCompress(src);
    44     printf("%s",compress);
    45     return 0;
    46 }
    View Code

     7.字符串解压。题目描述:"e5a3f2" 解压缩为"eeeeeaaaff"

     1 #include <string.h>
     2 #include <ctype.h>
     3 #include <stdlib.h>
     4 ////a1b1c3    ==>abccc
     5 ////aac3      ==>aaccc
     6 ////a111b2c3   ==>aaaaaaaaaaabbccc
     7 char *getString(char *str,char ch,int size)
     8 {
     9     if(*str)
    10     {
    11         str = NULL;
    12         str = (char *)malloc(100*sizeof(char));
    13     }
    14     char *pstr = str;
    15     for(int i=0;i<size;i++)
    16     {
    17         *pstr = ch;
    18         pstr++;
    19     }
    20     return str;
    21 }
    22 char *getSubString(const char *src,int size)
    23 {
    24     char srcCopy[100] = {};
    25     strcpy(srcCopy, src);
    26     char *ret = NULL;
    27     srcCopy[size] = '';
    28     ret = srcCopy;
    29     return ret;
    30 }
    31 char * getCompressToString(char *src)
    32 {
    33     char result[100] = {};
    34     int len = (int)strlen(src);
    35     int cnt = 0;
    36     int cnt1 = 0;
    37     int c_num = 0;
    38     char al[100] = {};
    39     int num[100] = {0};
    40     for(int i=0;i<len;i++)
    41     {
    42         if(isalpha(src[i]))
    43         {
    44             al[cnt] = src[i];
    45             cnt++;
    46         }else if(isdigit(src[i]))
    47         {
    48             char * temp = (src + i);
    49             while(isdigit(*temp))
    50             {
    51                 c_num++;
    52                 temp++;
    53             }
    54             char *ret = getSubString(src+i, c_num);
    55             i = i+c_num-1;
    56             c_num = 0;
    57             num[cnt1] = atoi(ret);
    58             cnt1++;
    59         }
    60     }
    61     int alLen = (int)strlen(al);
    62     char ret[100] = {};
    63     char *m_ret = NULL;
    64     for(int i=0;i<alLen;i++)
    65     {
    66         strcat(ret, getString(result, al[i], num[i]));
    67     }
    68     int n_len = (int)strlen(ret);
    69     *(ret+n_len) = '';
    70     m_ret = ret;
    71     return m_ret;
    72 }
    73 int main(int args,const char *argv[])
    74 {
    75     char src[100] = "j10h11y7";
    76     char uu[100] = {};
    77     
    78     char *r = getCompressToString(src);
    79     strcpy(uu, r);
    80     
    81     printf("%s",uu);
    82 }
    View Code
  • 相关阅读:
    游标
    mobaxterm安装与使用(root_35/37/36/121)
    美团笔试--修改矩阵
    美团笔试1--螺旋矩阵
    assert函数
    2019年头条笔试--围坐分糖果
    邻值查找——stl函数lower_bound和upper_bound的使用
    动态规划练习1--腾讯暑期实习正式批
    Windows 7下硬盘安装CentOS6.4的解决方法
    Sublime Text 3 的一些基本使用方法和配置
  • 原文地址:https://www.cnblogs.com/BeyondAverage0908/p/4556829.html
Copyright © 2020-2023  润新知