编写一个程序,用 12 个月份的英文名称初始化一个字符指针数组,首字母大写。当键盘输入整数为 1 到 12 时,显示相应的月份名,键入其他整数时显示error!
时间: 2024-05-04 20:18:07 浏览: 78
以下是C++的代码实现:
```cpp
#include <iostream>
#include <string>
using namespace std;
int main() {
// 初始化月份名称数组
string months[12] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
int input;
cout << "请输入一个整数(1-12):" << endl;
cin >> input;
if (input >= 1 && input <= 12) {
cout << months[input-1] << endl; // 索引从 0 开始,需要减 1
} else {
cout << "error" << endl;
}
return 0;
}
```
执行程序后,会提示用户输入一个整数,如果输入的整数是 1 到 12 之间的数,则会输出相应的月份名称,否则会输出 error。
相关问题
给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次。在执行上述操作后,找到包含重复字母的最长子串的长度。 输入 第一行输入一个正整数 ,表示字符串长度; 第二行输入该大写字母组成的字符串; 第三行输入一个数 ; 其中 0<=k<n<=1e4 输出 输出一个数,表示重复字母组成子串的长度 c++
您好!对于您的问题,您可以使用滑动窗口的方法来解决。具体步骤如下:
1. 初始化一个字典freq,用于记录字符串中每个字符出现的次数。
2. 定义左指针left和右指针right,初始化为0。
3. 定义变量maxLen,用于记录最长重复字母组成子串的长度。
4. 进入循环,循环条件是右指针小于字符串长度。
- 将右指针所指的字符加入字典freq,并更新该字符的出现次数。
- 如果当前窗口内不满足重复字母个数不超过k个的条件,即right - left + 1 - max(freq.values()) > k,说明窗口内需要替换的字符超过了k个。
- 将左指针所指的字符从字典freq中减去,并更新该字符的出现次数。
- 左指针右移一位。
- 更新最长子串长度maxLen,即max(maxLen, right - left + 1)。
- 右指针右移一位。
5. 返回最长子串长度maxLen。
以下是一个示例的C++代码实现:
```cpp
#include <iostream>
#include <unordered_map>
#include <algorithm>
using namespace std;
int longestSubstring(string s, int k) {
unordered_map<char, int> freq;
int left = 0, right = 0;
int maxLen = 0;
while (right < s.length()) {
freq[s[right]]++;
if (right - left + 1 - max_element(freq.begin(), freq.end(), [](const auto& a, const auto& b) { return a.second < b.second; })->second > k) {
freq[s[left]]--;
left++;
}
maxLen = max(maxLen, right - left + 1);
right++;
}
return maxLen;
}
int main() {
int n, k;
cin >> n;
string s;
cin >> s;
cin >> k;
int result = longestSubstring(s, k);
cout << result << endl;
return 0;
}
```
希望能帮助到您!如有任何疑问,请随时向我提问。
已知一个ASCII码文件,文件名为dict.dic,该文件中只包含ASCII码中的字符,即可对应整数0—127。我们将ASCII码中的字符分为4类,第一类为大写字母“A—Z”、第二类为小写字母“a—z”、第三类为数字字符“0—9”、第四类为其他字符“!@#$%^&*” 等等(不属于前三类的字符即为第四类)。 要求: 1.统计出这四类字符在该文件中的数量。 2.统计出该文件的行数、行最大长度、行最小长度。这里要注意,虽然文件的换行符确实为一个字符,ASCII码为10,但在统计行长度时,文件中的换行符并不统计在内。 3.输出具体的大小写字母的统计信息,每行一个字母。 4.处理完成后,关闭文件。 内容提示:在本题对文件的操作内容中,会用到三个新的C语言文件操作函数,一种新的打开文件的方式,如下: 1.FILE *fp=fopen("file.txt","r");//fp即为文件指针,"file.txt"为待打开的文件名,此时应与该程序在一个目录下,"r"为以只读方式打开ASCII码文件。 2.int ch=fgetc(fp);//从fp指向的文件中读取一个字节(字符),存入变量ch内。 3.fclose(fp);//关闭fp指向的文件。
好的,这是一个关于C语言文件操作的问题。为了解决这个问题,我们可以按照以下步骤进行:
1.定义变量并初始化
```c
int upper_cnt = 0; // 大写字母数量
int lower_cnt = 0; // 小写字母数量
int digit_cnt = 0; // 数字数量
int other_cnt = 0; // 其他字符数量
int line_cnt = 0; // 行数
int max_line_len = 0; // 最大行长度
int min_line_len = INT_MAX; // 最小行长度,初始值为int最大值
```
2.打开文件并逐个读取字符
```c
FILE *fp = fopen("dict.dic", "r");
if (fp == NULL) {
printf("Failed to open file.\n");
exit(1);
}
int ch = fgetc(fp);
while (ch != EOF) { // 继续读取直到文件结束
// 统计字符类型
if (ch >= 'A' && ch <= 'Z') {
upper_cnt++;
} else if (ch >= 'a' && ch <= 'z') {
lower_cnt++;
} else if (ch >= '0' && ch <= '9') {
digit_cnt++;
} else {
other_cnt++;
}
// 统计行数和行长度
if (ch == '\n') {
line_cnt++;
if (max_line_len < line_len) {
max_line_len = line_len;
}
if (min_line_len > line_len) {
min_line_len = line_len;
}
line_len = 0; // 重新开始计算下一行长度
} else {
line_len++;
}
ch = fgetc(fp);
}
fclose(fp); // 关闭文件
```
3.输出统计结果
```c
printf("大写字母数量:%d\n", upper_cnt);
printf("小写字母数量:%d\n", lower_cnt);
printf("数字数量:%d\n", digit_cnt);
printf("其他字符数量:%d\n", other_cnt);
printf("行数:%d\n", line_cnt);
printf("最大行长度:%d\n", max_line_len);
printf("最小行长度:%d\n", min_line_len);
```
4.输出大小写字母的具体统计信息
```c
for (int i = 'A'; i <= 'Z'; i++) {
printf("%c:%d\n", i, count_letter(fp, i));
}
for (int i = 'a'; i <= 'z'; i++) {
printf("%c:%d\n", i, count_letter(fp, i));
}
```
其中,`count_letter`函数用于统计给定字母在文件中出现的次数:
```c
int count_letter(FILE *fp, int letter) {
int count = 0;
int ch = fgetc(fp);
while (ch != EOF) {
if (ch == letter) {
count++;
}
ch = fgetc(fp);
}
fseek(fp, 0, SEEK_SET); // 重置文件指针
return count;
}
```
最后别忘了在程序开头包含`#include <limits.h>`头文件,以使用`INT_MAX`宏定义。
阅读全文