首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >C/C++语言连续读入一组字符串

C/C++语言连续读入一组字符串

作者头像
用户7886150
修改于 2021-02-14 15:10:16
修改于 2021-02-14 15:10:16
1.6K0
举报
文章被收录于专栏:bit哲学院bit哲学院

参考链接: C++ rewind()

C风格字符串应该理解成最后一个元素是‘\0’的特殊字符数组。 若使用C语言连续读入一组(多个)字符串,则面临如下问题: 1 若使用“%s”格式读入,则输入过程遇到空格、table,回车后自动终止输入,无法输入空格。 2若使用“%c”格式读入,如何连续输入多个字符串?即如何实现以回车终止输入? 

以“%s”格式输入字符串的实现方法类似这种情况: 

//传入字符指针数组,函数完成输入字符串并将指针指向这些字符串

void cinStr(int n, char * str[]) {

    int i = 0,j = 0;

    char tmp[10];

    for (i; i < n; ++i) {

        scanf_s("%s", tmp,10);

        str[i] = new char[10];

        strcpy_s(str[i],strlen(tmp)+1, tmp);

    }

}

以getchar()函数的实现方法类似这种情况 

void cinStr(int n, char * str[]) {

    int i = 0,j = 0;

    char tmp[10];

    for (i = 0; i < n; ++i) {

        for (j = 0;; ++j) {

            tmp[j] = getchar();

            if (tmp[j] == '\n') {

                tmp[j] = '\0';

                break;

            }

        }

        str[i] = new char[10];

        strcpy_s(str[i], strlen(tmp) + 1, tmp);

    }

}

C++风格字符串结合容器的实现 

//C++风格字符串的实现方式

//函数cinStr完成向容器中写入字符串

void cinStr(vector<string> & m){

    string mStr;

    cin >> mStr;

    m.push_back(mStr);

}

//函数Transfor完成从容器中取出字符串,格式化后输出

void Transform(int num, const vector<string> & str_array) {

    string filename, basename, extname, tmpname;

    const string defaulName("tmp");

    int i = 0;

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

        filename = str_array[i];

        int point_p = 0;

        point_p = filename.find('.');

        if (point_p == -1) {

            basename = filename;

            tmpname = basename + '.' + defaulName;

        }

        else {

            basename = filename.substr(0, point_p);

            extname = filename.substr(point_p + 1);

            if (extname.empty()) {

                tmpname = filename + defaulName;

            }

            else {

                if (extname == defaulName) {

                    tmpname = filename.replace(point_p + 1, extname.size(), "xxx");

                }

                else

                {

                    tmpname = filename.replace(point_p + 1, extname.size(), defaulName);

                }

            }

        }

        cout << str_array[i] << " -> " << tmpname << endl;

    }

}

int main() {

    const int nuStr = 5;

    int i;

    vector<string> vecStr;

    for (i = 0; i < nuStr; ++i) {

        cinStr(vecStr);

    }

    Transform(nuStr, vecStr);

    return 0;

}

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档