c++有关string问题

img


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

可采纳 代码后有解释
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函数对加密后的字符串进行解密,并将解密后的结果输出。

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/810709
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:问题记录_初始化带有string的结构体
  • 除此之外, 这篇博客: string类型的常用操作中的 string字符串类型的常用函数 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • (一本通第五版没有此内容,校本教材此内容不全)
    前提:以下所有函数的使用前提是已经定义了 string s1,s2,s;这三个字符串,int a;这个整型变量;
    注意:c++中字符数组和字符串的函数是不一样的,字符数组的操作在第五版一本通中有详细论述(第五版一本通P104.那里说的字符串其实就是字符数组。所以我说一本通太坑了。。。套路我两次了)
    1、

  • 您还可以看一下 邱石老师的小程序开发入门课程中的 6-4认识string字符串数据小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    在C++中使用string类型可以方便地处理字符串。string是C++标准库中的一个类,定义在头文件中。具体使用方法如下:

    1. 声明string类型变量并初始化:

    string str = "hello world";

    1. string支持字符串的输入输出

    2. cin > > str;

    3. cout << str;

    4. string可以直接进行比较和赋值

    5. str1 = str2;

    6. str1 == str2;

    7. 进行字符串插入、删除、替换操作

    8. str.insert(pos, char/string);

    9. str.erase(pos, len);
    10. str.replace(pos, len, char/string);

    11. 可以使用类似数组下标形式的方式来访问字符串中的每一个字符

    12. str[i];

    注意事项和技巧:

    1. 使用string类型时尽量不要使用C语言中常用的字符数组(char[])和字符串处理函数(如strcpy等),避免出现数组越界和空间溢出的问题。

    2. 在进行字符串输入时建议使用getline(cin, str)函数,可以避免字符串中含有空格时只读到空格前的字符的情况。

    3. 在进行字符串比较时,需要使用string类中提供的成员函数或重载运算符,不能使用C语言中的strcmp等函数。

    4. string 类的底层实现是字符数组和指针,因此应尽量避免频繁的插入和删除操作,这样会使字符数组被多次移动,降低效率。

    代码实现(以字符串中替换某一字符为例):

    include

    include

    using namespace std;

    int main() { string str; char a, b; getline(cin, str); cin >> a >> b; for (int i = 0; i < str.length(); ++i) { if (str[i] == a) str[i] = b; } cout << str << endl; return 0; }

    输出:替换前字符串和替换目标字符:

    hello world o a 替换后的字符串:

    hella warld

    参考资料:

    1. C++ string介绍及用法详解

    2. C++ string用法

    3. string详解

    4. C++字符串string的基本操作


#include<bits/stdc++.h>
#include<string>
#include<algorithm>
using namespace std;
string a[101],s;
int n;
 
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>s;
        for(int i=0;i<s.length();i++){
            s[i]=toupper(s[i]);
        }
        a[i]=s;
    }
    sort(a+1,a+n+1);
    for(int i=1;i<=n;i++)cout<<a[i]<<endl;
    return 0;
}