iOS-C_Day13___字符串练习

2015.2.4

 

#include <stdio.h>

//"hello:,:,:world:qian:feng"

//char *my_strtok(char *string, const char *demi)

//{

//    static char *token;

//    char *str;

//    if (string) {

//        str = string;

//    }

//    else

//    {

//        str = token;

//    }

//    

//    while (*str) {

//        if (strchr(demi, *str)) {

//            str++;

//        }

//        else

//        {

//            break;

//        }

//    }

//    string  = str;

//    

//    while (*str) {

//        if (strchr(demi, *str)) {

//            *str++ = ‘\0‘;

//            break;

//        }

//        str++;

//    }

//    token = str;

//    

//    if (str==string) {

//        return NULL;

//    }

//    return string;

//}

//int main(int argc,const char *argv[])

//{

//    char str[100]="hello:,world:qian:feng";

//    char *pstr = str;

//    while ((pstr = my_strtok(pstr, ":,"))) {

//        printf("%s\n",pstr);

//        pstr = NULL;

//    }

//    return 0;

//}

 

//字符串排序。比较三个字符串的大小,然后按从小到大的顺序将字符串输出。

//比如:

//输入

//asdfwd

//ddrwf

//ffweff

//输出为

//asdfwd

//ddrwf

//ffweff

//

//输入

//sgfgeasdfw

//aabbe

//wrwwdfaf

//输出为

//aabbe

//sgfgeasdfw

//wrwwdfaf

/*#include <stdlib.h>

#include <string.h>

 

int main(int argc,const char *argv[])

{

    char *pstr[10]={NULL};

    int cnt = 0;

    for (int i=0; i<10; i++) {

        pstr[i] = calloc(100, 1);

        if (!pstr[i]) {

            return -1;

        }

        scanf("%s",pstr[i]);

        cnt++;

        if (getchar()==‘\n‘) {

            break;

        }

    }

    //排序指针数组

    for (int i=0; i<cnt-1; i++) {

        for (int j=0; j<cnt-i-1; j++) {

            if (strcmp(pstr[j],pstr[j+1])>0) {

                char *temp = pstr[j];

                pstr[j]=pstr[j+1];

                pstr[j+1]=temp;

            }

        }

    }

    //打印输出

    

    for (int i=0; i<cnt; i++) {

        printf("%s\n",pstr[i]);

    }

    return 0;

}

*/

 

//字符串原地压缩。题目描述:“eeeeeaaaff" 压缩为 "e5a3f2"。

//字符串压缩算法,把s字符串压缩处理后结果保存在res中

//

//比如:

//输入

//"aaaaeefggg"

//输出为

//a4e2f1g3

//

//输入

//hhfhhhhfm

//输出为

//h2f1h4h2

 

/*int main(int argc,const char *argv[])

{

    char str[100]={};

    char buf[100]={};

    scanf("%s", str);

    char *pstr = str;

    int cnt = 1;

    int len=0;

    while (*pstr) {

        if (*pstr==*(pstr+1)) {

            cnt++;

        }

        else

        {

            len+=sprintf(buf+len, "%c%d",*pstr,cnt);

            cnt=1;

        }

        pstr++;

    }

    printf("%s\n", buf);

    return 0;

}*/

 

//字符串原地压缩。题目描述:"e5a3f2" 解压缩为 “eeeeeaaaff"。

//字符串压缩算法,把s字符串压缩处理后结果保存在res中

//

//比如:

//输入

//a4e2f1g3

//输出为

//aaaaeefggg

//

//输入

//h21f1h4h2

//输出为

//hhfhhhhff

#include <ctype.h>

#include <stdlib.h>

 

/*int main(int argc,const char *argv[])

{

    char str[100]={};

    char *buf=NULL;

    char ch[100]={};

    int count[100]={};

    char *pstr = str;

    scanf("%s",str);

    int len=0;

    while (*pstr) {

        sscanf(pstr, "%c%d",&ch[len],&count[len]);

        pstr++;

        while (isdigit(*pstr)) {

            pstr++;

        }

        len++;

    }

    

    int sum =0;

    for (int i=0; i<len; i++) {

        sum+=count[i];

    }

    

    buf = (char *)malloc(sum);

    int cnt=0;

    for (int i=0; i<len; i++) {

        for (int j=0; j<count[i]; j++) {

            buf[cnt++]=ch[i];

        }

    }

    printf("%s\n",buf);

 

    return 0;

}*/

 

//求一个字符串s的最大连续递增数字子串。

//

//

//比如:

//输入

//f123fffwf3212789:abcd

//输出为

//123

//

//输入

//abcd765bbw1357f123

//输出为

//123

 

//int main(int argc,const char *argv[])

//{

//    char str[200]={};

//    char *pmax=NULL;

//    int maxLen=0;

//    

//    int cnt=0;

//    scanf("%s",str);

//    char *pstr = str;

//    

//    while (*pstr) {

//        if (isdigit(*pstr)) {

//            cnt=1;

//            while ((*pstr == *(pstr+1)-1) && isdigit(*(pstr+1))) {

//                cnt++;

//                pstr++;

//            }

//            if (maxLen < cnt) {

//                maxLen = cnt;

//                pmax = pstr-maxLen+1;

//            }

//        }

//        pstr++;

//    }

//    if (pmax) {

//        *(pmax+maxLen)=‘\0‘;

//        printf("%s\n",pmax);

//    }

//    return 0;

//}

 

//输入一段字符串,把相同的字符按出现顺序,归在一起,并压缩

//比如:

//输入 SamSameCome

//SSamameCome

//SSaammeCome

//SSaammmeCoe

//SSaammmeeCo

 

//输出:

//SSaammmeeCo

//S2a2m3e2C1o1

//

//输入 ComeTomeTCoe

//输出:

//CCooommeeeTT

//C2o3m2e3T2

#include <string.h>

 

int main(int argc,const char *argv[])

{

    char str[100]={};

    scanf("%s",str);

    char *pstr = str;

    

    while (*pstr) {

        char *ptemp = pstr+1;

        for (int i=0; *ptemp; i++) {

            if (*pstr == *ptemp) {

                memmove(pstr+2, pstr+1, ptemp-pstr-1);

                *(pstr+1)=*pstr;

            }

            ptemp++;

        }

        pstr++;

    }

    printf("%s\n",str);

    return 0;

}

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。