zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Html禁止粘贴 复制 剪切
    表单标签
    自构BeanHandler(用BeansUtils)
    spring配置中引入properties
    How Subcontracting Cockpit ME2ON creates SD delivery?
    cascadia code一款很好看的微软字体
    How condition value calculated in sap
    Code in SAP query
    SO Pricing not updated for partial billing items
    Javascript learning
  • 原文地址:https://www.cnblogs.com/BeyondAverage0908/p/4556829.html
Copyright © 2011-2022 走看看