2301_78342264 2023-06-01 00:32 采纳率: 100%
浏览 117
已结题

c++有关string问题

img


这是一个c++有关string的应用,麻烦大家解答,非常谢谢大家

  • 写回答

3条回答 默认 最新

  • Minuw 2023-06-01 08:54
    关注

    可采纳 代码后有解释
    10.1

    #include <iostream>
    #include <string>
    #include <algorithm>
    
    using namespace std;
    
    int main() {
        string words[100];
        int n;
    
        // 输入单词数量和单词
        cout << "请输入单词数量:";
        cin >> n;
        cout << "请输入" << n << "个单词:" << endl;
        for (int i = 0; i < n; i++) {
            cin >> words[i];
        }
    
        // 对单词按字典顺序排序
        sort(words, words + n);
    
        // 将排序后的单词连在一起,并输出结果
        string result = words[0];
        for (int i = 1; i < n; i++) {
            if (words[i].substr(0, result.length()) == result) {
                result = result + " " + words[i];
            } else {
                cout << result << endl;
                result = words[i];
            }
        }
        cout << result << endl;
    
        return 0;
    }
    

    程序中,首先定义了一个字符串数组words,用于存储输入的单词;然后通过cin输入单词数量和单词,并将它们存储到数组中;接着使用sort函数对单词按字典顺序排序;最后使用一个循环将排序后的单词连在一起,并输出结果。
    循环中,首先将第一个单词赋值给结果字符串result,然后从第二个单词开始,判断当前单词的前缀是否与结果字符串相同,如果相同,则将当前单词添加到结果字符串的末尾,中间用空格隔开;如果不同,则输出当前结果字符串,并将当前单词赋值给结果字符串。循环结束后,还需要再输出一次结果字符串,以确保最后一个单词被添加到结果字符串中。

    10.2

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main() {
        string sentence;
        string keyword;
        int pos = -1;
        int count = 0;
    
        // 输入句子和关键词
        cout << "请输入一段英文句子:";
        getline(cin, sentence);
        cout << "请输入要查找的关键词:";
        getline(cin, keyword);
    
        // 检索关键词
        while ((pos = sentence.find(keyword, pos + 1)) != string::npos) {
            count++;
            if (count == 1) {
                cout << "关键词第一次出现的位置为:" << pos << endl;
            }
        }
    
        // 输出结果
        if (count == 0) {
            cout << "无法找到关键词,请重新输入。" << endl;
        } else {
            cout << "关键词共出现了" << count << "次。" << endl;
        }
    
        return 0;
    }
    

    程序中,首先通过getline函数分别输入英文句子和关键词,并定义了变量pos和count,分别用于记录关键词第一次出现的位置和出现的总次数,初始值均为-1和0。
    然后使用while循环和string类的find函数查找关键词,每次查找到关键词后,将pos的值更新为当前位置的下一个位置,以便在下一次查找时从下一个位置开始查找,并将count加1。如果count为1,则表示当前查找到的是关键词第一次出现的位置,需要将其输出。
    循环结束后,根据count的值输出结果。如果count为0,则表示无法找到关键词,需要提示用户重新输入;否则,输出关键词出现的总次数。

    选做实验

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    // 进行字符串加密
    string encrypt(string s, string key) {
        int len = s.length();
        int key_len = key.length();
        for (int i = 0; i < len; i++) {
            if (s[i] == ' ') {
                s[i] = ' ' + 2;
            } else if (s[i] >= 'A' && s[i] <= 'Z') {
                s[i] = ('A' + (s[i] - 'A' + key[i % key_len] - '1') % 26);
            } else if (s[i] >= 'a' && s[i] <= 'z') {
                s[i] = ('a' + (s[i] - 'a' + key[i % key_len] - '1') % 26);
            } else if (s[i] >= '0' && s[i] <= '9') {
                s[i] = ('0' + (s[i] - '0' + key[i % key_len] - '1') % 10);
            }
        }
        return s;
    }
    
    // 进行字符串解密
    string decrypt(string s, string key) {
        int len = s.length();
        int key_len = key.length();
        for (int i = 0; i < len; i++) {
            if (s[i] == ' ' + 2) {
                s[i] = ' ';
            } else if (s[i] >= 'A' && s[i] <= 'Z') {
                s[i] = ('A' + (s[i] - 'A' - key[i % key_len] + '1' + 26) % 26);
            } else if (s[i] >= 'a' && s[i] <= 'z') {
                s[i] = ('a' + (s[i] - 'a' - key[i % key_len] + '1' + 26) % 26);
            } else if (s[i] >= '0' && s[i] <= '9') {
                s[i] = ('0' + (s[i] - '0' - key[i % key_len] + '1' + 10) % 10);
            }
        }
        return s;
    }
    
    int main() {
        string key;
        string input_str;
        string encrypted_str;
        string decrypted_str;
    
        // 输入加密密钥
        cout << "请输入加密密钥:";
        getline(cin, key);
    
        // 输入需要加密的字符串
        cout << "请输入需要加密的字符串:";
        getline(cin, input_str);
    
        // 加密字符串
        encrypted_str = encrypt(input_str, key);
        cout << "加密后的字符串为:" << encrypted_str << endl;
    
        // 解密字符串
        decrypted_str = decrypt(encrypted_str, key);
        cout << "解密后的字符串为:" << decrypted_str << endl;
    
        return 0;
    }
    

    程序中,首先定义了两个函数encrypt和decrypt,用于进行字符串加密和解密。encrypt函数使用密钥对字符串进行循环加密,并返回加密后的字符串。decrypt函数接受加密后的字符串和密钥,进行解密,并返回解密后的字符串。
    在encrypt和decrypt函数中,分别使用了判断语句,判断当前字符是字母、数字还是空格,以便对其进行不同的加密和解密操作,当遇到空格时,将其加数改为了2,以便在解密中进行移位操作。
    在main函数中,首先通过getline函数分别输入加密密钥和需要加密的字符串,然后调用encrypt函数对字符串进行加密,将加密后的结果输出,接着调用decrypt函数对加密后的字符串进行解密,并将解密后的结果输出。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月9日
  • 已采纳回答 6月1日
  • 请回答用户的提问 6月1日
  • 创建了问题 6月1日