天天看點

7.15Training4:字元串訓練

Training4:字元串訓練

1. 題目: 請編寫一個C函數,該函數将一個字元串逆序 

#include<stdio.h>

#include<string.h>

#define N 50

void strRev(char *s)

{

char temp;

char *end = s + strlen(s) - 1;

while (end > s)

{

temp = *s;

*s = *end;

*end = temp;

--end;

++s;

}

}

int main()

{

char s[N];

printf("Enter string!\n");

fgets(s,N,stdin);

strRev(s);

printf("The strRcv string!");

puts(s);

    return 0;

}

2. 題目: 請編寫一個C函數,該函數可以實作将一個整數轉為任意進制的字元串輸出

#include <stdio.h>

int fun2(int num);

int fun16(int num);

int fun8(int num);

int main()

{

    int num,kind;    

printf("Enter the number : \n");        

scanf("%d",&num);

printf("what kind of number do you want to change(2 or 16 or 8) :\n");

scanf("%d",&kind);

if(kind == 2)    

{

fun2(num);

}

else if(kind == 16)

{

fun16(num);

}

else if(kind == 8)

{

fun8(num);

}

else        

{

printf("error!\n");

}

    return 0;

}

int fun2(int num)        

{

int s[32] = {0};

int i,n = 0;

while(num != 0)

{

s[n++] = num % 2;

num = num / 2;

}

printf("二進制數為 :");

for(i = n - 1;i >= 0;i--)

{

printf("%d",s[i]);

}

printf("\n");

return 0;

}

int fun16(int num)         

{

int s[32] = {0};

int i,n = 0;

while(num != 0)

{

s[n++] = num % 16;

num = num / 16;

}

printf("十六進制數為 :");

for(i = n - 1;i >= 0;i--)

{

printf("%d",s[i]);

}

printf("\n");

return 0;

}

int fun8(int num)        

{

int s[32] = {0};

int i,n = 0;

while(num != 0)

{

s[n++] = num % 8;

num = num / 8;

}

printf("八進制數為 :");

for(i = n - 1;i >= 0;i--)

{

printf("%d",s[i]);

}

printf("\n");

return 0;

}

3. 題目: 輸入一個字元串,計算字元串中子串出現的次字數

#include <stdio.h>

#include <string.h>

void main()

{

    char str1[20], str2[20], *p1, *p2;

    int sum=0;

    printf("Please enter two strings\n");

    scanf("%s%s", str1, str2);

    p1=str1;

    p2=str2;

    while(*p1 != '\0')

    {

        if(*p1 == *p2)

        {

            while(*p1 == *p2 && *p2 != '\0')

            {

                p1++;

                p2++;

            }

        }

        else

            p1++;

        if(*p2 == '\0')

            sum++;

        p2=str2;

    }

    printf("%d", sum);

    getchar();

}

4. 題目: 編寫一個C函數,将”I am from shanghai ”倒置為”shanghai from am I”,即将句子中的單詞位置倒置,而不改變單詞内部結構.

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

int main()

{

    int i = 0;

    int j = 0;

    int len  = 0;

    char *temp;

    char *str[] = { "I", "am","from","shanghai" ,NULL};

    while (str[i] != NULL)

    {

        i++;

        len++;

    }

    for(i = 0, j = len - 1; j  > i; i++,j--)

    {

        temp =*(str+i);

        *(str+i) = *(str+j);

        *(str+j) = temp;

    }

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

    {

        printf("%s ", *(str+i));

    }

    printf("\n");

    return 0;

}

5.  題目: 輸入一個字元串,同時輸入幀頭和幀尾(可以是多個字元),将該字元串中合法的幀識别出來.

提示:幀頭和幀尾分别是head和tail  字元串”asdheadhauboisoktail”中headhauboisoktail是合法幀

#include <stdio.h>

#include <string.h>

int main()

{

char s[100];

  char str1[100];

char str2[100];

printf("Please enter your string:\n");

gets(s);

printf("Please enter the frame head:\n");

gets(str1);

printf("Please input pin the tail:\n");

gets(str2);

char *p   = s;

char *p1  = str1;

char *p2  = str2;

char *p3  = NULL;

char *p4  = NULL;

printf("Legal frame in the string:\n");

while(*p)

{

if(strncmp(p,p1,strlen(str1))==0)

{

p3=p;

while(*p3)

{

if(strncmp(p3,p2,strlen(str2))==0)

{

int j=p3-p+strlen(str2),i;

p4 = p;

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

{

printf("%c",*p4++);

}

puts("\0");

}

*p3++;

}

}

*p++;

}

return 0;

}

下一篇: 練習7.15

繼續閱讀