使用占位符构造动态字符串

实现功能:
       模拟采用占位符构造动态字符串的格式化方法。构造一句话,其中包含不定数量的用{}括起来的数字,如{0},{1},{2},并提示用户输入字符串,并按照顺序替换包括花括号在内的数字,从而构造出新的一句话,并打印输出。
运行程序示例:

The {0} of the {1} is {2}.
subject”,  ”course”, ”data structure

则输出 :

The subject of the course if data structure.

设计思路:
       根据要求,拟采用三个数组来进行存储。一个一维字符串数组tr1用于存储原本句子,一维整型数组num用于存储与括号内的数字,二维字符串数组tr2用于存储用来替换的内容,其中第一个下标对应将要替换的括号内的数字,数组内容为相应的替换内容(字符串)。
       在未扫描到“{”时则可以对tr1进行扫描打印,若查询到“{”,查询到之后读取括号后的数字,根据数字打印出tr2数组对应的内容,并将扫描位置向后跳3位(跳过数字和“}”),如此则可以打印出新的句子,实现要求。
       为防止同样的括号被重复计数,又设置了一个函数judge,在数值与已有数据不重复时返回1,否则返回0,由此可以控制num数组的读入,使得出现多次的同一种括号能被同样的内容替换。
       使用C++实现代码如下:

chuan.h

#include
void putsnewstr(char tr1[], char tr2[][30]);
int judge(int num[],int n, int j);

chuan.cpp

#include
#include"chuan.h"
void putsnewstr(char tr1[], char tr2[][30]) {
    int i = 0;
    while (tr1[i] != '\0') {
        if (tr1[i] != '{') { putchar(tr1[i]); i++; }
        else {
            int p = 0;
            while (tr2[tr1[i + 1] - '0'][p] != '\0') {
                putchar(tr2[tr1[i + 1] - '0'][p]);
                p++;
            }
            i += 3;
        }
    }printf("\n");
}

int judge(int num[],int n, int j) {
    while (n >= 0) {
        if (num[n] == j)return 0;
        else n--;
    }return 1;
}

main.cpp

#include
#include
#include
#include"chuan.h"
int main() {
    char tr1[80];
    int num[10];
    char tr2[10][30];

    int i = 0, j = 0, n = 0;
    printf("inptut your sentence\n");
    gets(tr1);
    while (tr1[i] != '\0') {
        if (tr1[i] == '{') {
            if (judge(num, n,tr1[i + 1]-'0')) { 
                num[n] = tr1[i + 1]-'0';
                printf("to replace the{%d}is:\n", num[n]);
                j = 0;
                while ((tr2[num[n]][j] =getchar())!='\n') {
                    j++;
                }
                tr2[num[n]][j] = '\0';
                n++;
            }
        }
        i++;
    }
    putsnewstr(tr1, tr2);   
    system("pause");
}

程序运行结果如图:


使用占位符构造动态字符串_第1张图片

你可能感兴趣的:(DataStructure)