20150605字符串及内存管理_练习

来源:互联网 发布:天刀范冰冰捏脸数据 编辑:程序博客网 时间:2024/06/05 03:46

//

//  main.c

//  IOS150605_Exercise

//

//  Created byPeng Junlong on 15/6/5.

//  Copyright (c) 2015 Peng Junlong. All rights reserved.

//


//*********************

//*                   *

//*     字符串练习      *

//*                   *

//*********************

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#include <time.h>

#include <ctype.h>

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

//比如:

//输入

//asdfwd

//ddrwf

//ffweff

//输出为

//asdfwd

//ddrwf

//ffweff


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

//    char str1[100] = {};

//    char str2[100] = {};

//    char str3[100] = {};

//    char *p1 = NULL;

//    char *p2 = NULL;

//    char *p3 = NULL;

//    printf("Enter three String:");

//    gets(str1);

//    gets(str2);

//    gets(str3);

//    if (strcmp(str1, str2) < 0) {

//        if (strcmp(str1, str3) < 0) {

//            p1 = str1;

//            if (strcmp(str2, str3) < 0) {

//                p2 = str2;

//                p3 = str3;

//            }

//            else

//            {

//                p2 = str3;

//                p3 = str2;

//            }

//        }

//        else

//        {

//            p1 = str3;

//            p2 = str1;

//            p3 = str2;

//        }

//    }

//    else{

//        if (strcmp(str2, str3) < 0) {

//            p1 = str2;

//            if (strcmp(str1, str3) < 0) {

//                p2 = str1;

//                p3 = str3;

//            }

//            else

//            {

//                p2 = str3;

//                p3 = str1;

//            }

//        }

//        else

//        {

//            p1 = str3;

//            p2 = str2;

//            p3 = str1;

//        }

//    }

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

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

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

//    return 0;

//}


//定义一个比较大的字符数组,然后从键盘进行初始化数组值,输出输入字符串的长度

//比如:

//输入

//asdfwd

//输出为

//6

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

//{

//    char aString[100] = {};

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

//    gets(aString);

//    printf("String length:%lu\n",strlen(aString));

//    

//    return 0;

//}


//定义两个元素个数相同的字符数组,然后对其中一个字符数组进行初始化,

//利用字符串处理函数将第一个数组中的内容复制到第二个数组中,并将两个数组中的内容分别输出。

//比如:

//输入

//asdfwd

//输出为

//asdfwd

//asdfwd


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

//{

//    char srcString[100];

//    char desString[100];

//    gets(srcString);

//    strcpy(desString, srcString);

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

//    

//    return 0;

//}


//定义一个字符数组,初始化数组,将内容输出利用memset函数将数组中的内容全部初始化为a,并将数组内容输出

//输入

//sgfgeasdfw

//输出为

//sgfgeasdfw

//aaaaaaaaaa


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

//{

//    char srcString[100];

//    gets(srcString);

//

//    memset(srcString, 'a', strlen(srcString));

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

//

//    return 0;

//}


//定义两个元素个数相同的数组,然后对其中一个数组进行随机初始化,

//利用memcpy函数将第一个数组中的内容复制到第二个数组中,并将两个数组中的内容分别输出。

//比如:

//输入

//asdfwd

//输出为

//asdfwd

//asdfwd


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

//{

//    int src[10];

//    int des[10];

//    //srand(time(NULL));

//    int i=0;

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

//        src[i] = rand()%100;

//    }

//    

//    memcpy(des, src, 4*i);

//    

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

//        printf("%d  ",src[i]);

//    }

//    printf("\n");

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

//        printf("%d  ",des[i]);

//    }

//    

//    return 0;

//}


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

//比如:

//输入

//asdfwd

//dfw

//输出为

//Y


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

//{

//    char faString[100];

//    char subString[20];

//    scanf("%s%s",faString,subString);

//    if(strstr(faString, subString))

//    {

//        printf("Y\n");

//    }

//    else

//        printf("N\n");

//    

//    return 0;

//}


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

//int subStringCount( char str[], char substr[] )

//{

//    int i, j, check ,count = 0;

//    int len = (int)strlen( str );        /*取得字符串长度,不包括'\0'*/

//    int sublen = (int)strlen( substr );

//    for( i = 0; i < len; i++ )

//    {

//        check = 1;        /*检测标记*/

//        for( j = 0; j + i < len && j < sublen; j++ )        /*逐个字符进行检测,在sublen长度内,一旦出现不同字符便将check置为0*/

//        {

//            if( str[i + j] != substr[j] )

//            {

//                check = 0;

//                break;

//            }

//        }

//        if( check == 1 )        /*sublen长度内的字符都相等*/

//        {

//            count++;

//            i = i + sublen;        /*调整检测起始位置*/

//        }

//    }

//    return count;

//}

//

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

//{

//    char faString[100];

//    char subString[10];

//    int count = 0;

//    scanf("%s%s",faString,subString);

//    count = subStringCount(faString,subString);

//    

//    printf("count = %d\n",count);

//    

//    return 0;

//}


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

//比如:

//输入

//asdfwd

//df

//输出为

//3


//int findSubStringLocation(char faString[],char subString[])

//{

//    int i;

//    int j;

//    int location = 0;

//    int check = 1;

//    int falen = (int)strlen(faString);

//    int sulen = (int)strlen(subString);

//    for (i=0; i<falen; i++) {

//        check = 1;

//        for (j = 0; j+i<falen && j<sulen; j++) {

//            if (faString[i+j] != subString[j]) {

//                check = 0;

//                break;

//            }

//        }

//        if (check == 1) {

//            location = i+1;

//            i = i+sulen;

//            break;

//        }

//    }

//    

//    return location;

//}

//

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

//{

//    char faString[100];

//    char subString[100];

//    int location;

//    scanf("%s%s",faString,subString);

//    location = findSubStringLocation(faString, subString);

//    

//    printf("Location = %d\n",location);

//    

//    return 0;

//}


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

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

//

//比如:

//输入

//aaaaeefggg

//输出为

//a4e2f1g3


//char *compressedString(char src[])

//{

//    char compressedStr[100];

//    int i = 0;

//    int j = 0;

//    int srclen = (int)strlen(src);

//    int num = 1;

//    int k = 0;

//    for (i=0; i<srclen;i+=num) {

//        num = 1;

//        if (src[i] != '@') {

//            for (j=i; j<srclen; j++) {

//                if (src[i] == src[j+1]) {

//                    src[j+1] = '@';

//                    num++;

//                }

//                else

//                    break;

//            }

//            compressedStr[k] = src[i];

//            compressedStr[k+1] = '0'+num;

//            k += 2;

//        }

//       

//    }

//    

//    return compressedStr;

//}

//

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

//{

//    char sourceString[100] = {};

//    //char compressString[100] = {};

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

//    //compressString = compressedString(sourceString);

//

//    printf("Compressed String = %s\n",compressedString(sourceString));

//

//    return 0;

//}



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

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

//

//比如:

//输入

//a4e2f1g3

//输出为

//aaaaeefggg


//char *deCompressString(char compreStr[])

//{

//    char deCompressedStr[100];

//    int i = 0;

//    int j = 0;

//    int count = 0;

//    int k = 0;

//    int comprestrLen = (int)strlen(compreStr);

//    for (i=0; i<comprestrLen; i+=2) {

//        count = compreStr[i+1]-'0';

//        for (j=0; j < count; j++) {

//            deCompressedStr[k] = compreStr[i];

//            k++;

//        }

//    }

//    

//    return  deCompressedStr;

//}

//

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

//{

//    char sourceString[100] = {};

//    //char compressString[100] = {};

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

//    //compressString = compressedString(sourceString);

//    

//    printf("Compressed String = %s\n",deCompressString(sourceString));

//    

//    return 0;

//}



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

//

//比如:

//输入

//f123fffwf3210abcd

//输出为

//123

//

//输入

//abcd765bbw1357f123

//输出为

//123


//char *mostStraightSubString(char srcString[])

//{

//    char *msSubString[100];

//    int subLen[100];

//    int straightLen = 0;

//    char *p;

//    int i = 0;

//    int j = 0;

//    int maxLen;

//    int index = 0;

//    for (p = srcString; ; p++) {

//        if (*p >= '0' && *p <= '9') {

//            if (straightLen == 0) {

//                straightLen = 1;

//            }

//            else

//            {

//                if (*(p-1) == *p-1) {

//                    straightLen++;

//                }

//                else

//                {

//                    if (straightLen > 0) {

//                        msSubString[i] = p-straightLen;

//                        subLen[i] = straightLen;

//                        i++;

//                    }

//                    straightLen = 1;

//                }

//            }

//        }

//        else{

//            if (straightLen > 0) {

//                msSubString[i] = p-straightLen;

//                subLen[i] = straightLen;

//                i++;

//            }

//            straightLen = 0;

//            if (*p == '\0') {

//                break;

//            }

//        }

//    }

//    

//    maxLen = subLen[0];

//    for (j=0; j<i; j++) {

//        if (subLen[j] > maxLen) {

//            maxLen = subLen[j];

//            index = j;

//        }

//    }

//    *(msSubString[index]+maxLen) = '\0';

//    return msSubString[index];

//}

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

//{

//    char sourceString[100] = {};

//    //char compressString[100] = {};

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

//    //compressString = compressedString(sourceString);

//

//    printf("Most Straight SubString = %s\n",mostStraightSubString(sourceString));

//

//    return 0;

//}


//统计任意串中大写字母的个数。

//

//

//比如:

//输入

//234ADWDGfwDW

//输出为

//7


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

//{

//    char sourceString[100] = {};

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

//    int capitalcount = 0;

//    int smalllettercount = 0;

//    int numcount = 0;

//    int len = (int)strlen(sourceString);

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

//        if (isupper(sourceString[i])) {

//            capitalcount++;

//        }

//        else if(islower(sourceString[i]))

//        {

//            smalllettercount++;

//        }

//        else if(isdigit(sourceString[i]))

//        {

//            numcount++;

//        }

//    }

//    

//    printf("Capitals number:%d\n",capitalcount);

//    printf("Small Letters number:%d\n",smalllettercount);

//    printf("number:%d\n",numcount);

//    return 0;

//}



//输入一段字符串将单词升序排列

//比如:

//输入 come good goals bad bed

//输出:

//bad bed come goals good


//void sortWord(char src[])

//{

//    char *p = src;

//    char *word[100];

//    int i=0;

//    char *temp = NULL;

//    while ((p = strtok(p, " "))) {

//        word[i] = p;

//        if (i!=0) {

//            *(p-1) = '\0';

//        }

//        p = NULL;

//        i++;

//    }

//    

//    for (int j=0; j<i; j++) {

//        printf("%s ",word[j]);

//    }

//    printf("\n");

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

//        

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

//            if (strcmp(word[k], word[k+1])>0) {

//                temp = word[k];

//                word[k] = word[k+1];

//                word[k+1] = temp;

//            }

//        }

//    }

//    

//    for (int j=0; j<i; j++) {

//        printf("%s ",word[j]);

//    }

//    

//    printf("\nWorld's count= %d\n",i);

//}

//

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

//{

//    char sourceString[100] = {};

//    gets(sourceString);

//    sortWord(sourceString);

//    return 0;

//}


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

//比如:

//输入 SamSameCome

//输出:

//SSaammmeeCo

//S2a2m3e2C1o1


//char *mergeString(char src[])

//{

//    int srcLen = (int)strlen(src);

//    int count = 1;

//    char des[100];

//    int index = 0;

//    for(int i=0;i<srcLen;i++)

//    {

//        count = 1;

//        for (int j=i+1; j<srcLen && src[i] != '\0'; j++) {

//            if (src[i] == src[j]) {

//                count++;

//                src[j] = '\0';

//            }

//        }

//        if (src[i] != '\0') {

//            for (int k=0; k<count; k++) {

//                des[index] = src[i];

//                index++;

//            }

//        }

//    }

//    des[index] = '\0';

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

//    

//    return des;

//}

//

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

//{

//    char sourceString[100] = {};

//    gets(sourceString);

//    char *mstr = mergeString(sourceString);

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

//    

//    printf("%s\n",compressedString(mstr));

//    

//    return 0;

//}


//输入一段字符串,统计其中的单词个数

//比如:

//输入 I like iOS

//输出:

//3


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

//{

//    char sourceString[100] = {};

//    gets(sourceString);

//    int stringLen = (int)strlen(sourceString);

//    int word = 0;

//    int wcount = 0;

//    for (int i=0; i<stringLen; i++) {

//        if (sourceString[i] == ' ') {

//            word = 0;

//        }

//        else if(word == 0)

//        {

//            word = 1;

//            wcount++;

//        }

//    }

//    printf("Count = %d\n",wcount);

//    return 0;

//}


//输入一段字符串,进行升序排列

//比如:

//输入 IamOptimusPrime

//输出:

//IOPaeiimmmprstu

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

//{

//    char sourceString[100] = {};

//    gets(sourceString);

//    int stringLen = (int)strlen(sourceString);

//    char temp;

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

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

//            if (sourceString[j] > sourceString[j+1]) {

//                temp = sourceString[j];

//                sourceString[j] = sourceString[j+1];

//                sourceString[j+1] = temp;

//            }

//        }

//    }

//    

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

//    return 0;

//}

0 0