可采纳 代码后有解释
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函数对加密后的字符串进行解密,并将解密后的结果输出。
(一本通第五版没有此内容,校本教材此内容不全)
前提:以下所有函数的使用前提是已经定义了 string s1,s2,s;这三个字符串,int a;这个整型变量;
注意:c++中字符数组和字符串的函数是不一样的,字符数组的操作在第五版一本通中有详细论述(第五版一本通P104.那里说的字符串其实就是字符数组。所以我说一本通太坑了。。。套路我两次了)
1、
在C++中使用string类型可以方便地处理字符串。string是C++标准库中的一个类,定义在头文件中。具体使用方法如下:
string str = "hello world";
string支持字符串的输入输出
cin > > str;
cout << str;
string可以直接进行比较和赋值
str1 = str2;
str1 == str2;
进行字符串插入、删除、替换操作
str.insert(pos, char/string);
str.replace(pos, len, char/string);
可以使用类似数组下标形式的方式来访问字符串中的每一个字符
str[i];
注意事项和技巧:
使用string类型时尽量不要使用C语言中常用的字符数组(char[])和字符串处理函数(如strcpy等),避免出现数组越界和空间溢出的问题。
在进行字符串输入时建议使用getline(cin, str)函数,可以避免字符串中含有空格时只读到空格前的字符的情况。
在进行字符串比较时,需要使用string类中提供的成员函数或重载运算符,不能使用C语言中的strcmp等函数。
string 类的底层实现是字符数组和指针,因此应尽量避免频繁的插入和删除操作,这样会使字符数组被多次移动,降低效率。
代码实现(以字符串中替换某一字符为例):
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
参考资料:
C++ string介绍及用法详解
C++ string用法
string详解
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;
}