1. 程式人生 > >PAT|中國大學MOOC-翁愷-C語言程式設計習題集33-36

PAT|中國大學MOOC-翁愷-C語言程式設計習題集33-36

10-1. 在字串中查詢指定字元(15)

輸入一個字串S,再輸入一個字元c,要求在字串S中查詢字元c。如果找不到則輸出“Not found”;若找到則輸出字串S中從c開始的所有字元。

輸入格式:

輸入在第1行中給出一個不超過80個字元長度的、以回車結束的非空字串;在第2行中給出一個字元。

輸出格式:

在一行中按照題目要求輸出結果。

輸入樣例1:
It is a black box
b
輸出樣例1:
black box
輸入樣例2:
It is a black box
B
輸出樣例2:
Not found

#include <stdio.h>
#include <string.h>
int main() { char a; char str[90]; int len, i, p, flag; gets(str); a = getchar(); len = strlen(str); flag = 0; for (i = 0; i <= len - 1; i++) { if (str[i] == a) { p = i; flag = 1; break; } } if (flag == 0
) { printf("Not found"); } else { for (i = p; i <= len - 1; i++) { printf("%c", str[i]); } } return 0; }

10-2. 刪除字串中的子串(20)

輸入2個字串S1和S2,要求刪除字串S1中出現的所有子串S2,即結果字串中不能包含S2。

輸入格式:

輸入在2行中分別給出不超過80個字元長度的、以回車結束的2個非空字串,對應S1和S2。

輸出格式:

在一行中輸出刪除字串S1中出現的所有子串S2後的結果字串。

輸入樣例:
Tomcat is a male ccatat
cat
輸出樣例:
Tom is a male.

#include <stdio.h>
#include <string.h>
int main()
{
    char str1[100];
    char str2[100];
    int len1, len2, i, j, k,flag,n,count;
    count = 0;
    gets(str1);
    gets(str2);
    len1 = strlen(str1);
    len2 = strlen(str2);
    for (i = 0; i <= len1 - 1; i++)//計算出現下面首字母的次數,也是進行分隔字元篩選的迴圈次數
    {
        if (str1[i] == str2[0])
        {
            count++;
        }
    }
    for (n = 1; n <= count - 1; n++)
    {
        for (i = 0; i <= len1 - 1; i++)//從第一位開始遍歷字串2的首字母
        {
            if (str1[i] == str2[0])
            {
                flag = 0;
                for (j = i; j <= i + len2 - 1; j++)//從字串一擷取字串二長度的字元
                {
                    if (str1[j] != str2[j - i])//判斷兩組字元是否相對
                    {
                        flag = 1;
                        break;
                    }
                }
                if (flag == 0)//長得相同就將右邊的字元向左移字串2的長度,並且將字串1減去該長度
                {
                    for (k = i; k <= len1 - 1; k++)
                    {
                        str1[k] = str1[k + len2];
                    }
                    len1 = len1 - len2;
                }
            }
        }
    }
    for (i = 0; i <= len1 - 1; i++)//輸出處理後字串
    {
        printf("%c", str1[i]);
    }
    return 0;
}

10-3. 字串逆序(15)

輸入一個字串,對該字串進行逆序,輸出逆序後的字串。

輸入格式:

輸入在一行中給出一個不超過80個字元長度的、以回車結束的非空字串。

輸出格式:

在一行中輸出逆序後的字串。

輸入樣例:
Hello World!
輸出樣例:
!dlroW olleH

#include <stdio.h>
#include <string.h>
int main()
{
    char str[10000];
    int len, i;
    gets(str);
    len = strlen(str);
    for (i = len - 1; i >= 0; i--)
    {
        printf("%c", str[i]);
    }
    return 0;
}

10-4. 字串迴圈左移(20)

輸入一個字串和一個非負整數N,要求將字串迴圈左移N次。

輸入格式:

輸入在第1行中給出一個不超過100個字元長度的、以回車結束的非空字串;第2行給出非負整數N。

輸出格式:

在一行中輸出迴圈左移N次後的字串。

輸入樣例:
Hello World!
2
輸出樣例:
llo World!He

#include <stdio.h>
#include <string.h>
int main()
{
    char str[250];
    int num, len, i;
    gets(str);
    scanf("%d", &num);
    len = strlen(str);
    for (i = len; i <= 2 * len - 1; i++)
    {
        str[i] = str[i - len];
    }
    num = num%len;
    for (i = num; i <= num+len-1; i++)
    {
        printf("%c", str[i]);
    }
    return 0;
}