又是我。在我所有的问题中,我认为这是所有问题中最愚蠢的,但由于疲劳或愚蠢,我也需要一些帮助。然而,最重要的是,我这样做是为了我的一项任务,并且有一个严格的规则 - 我必须使用一个函数调用
char* 编码(char* source, char const* alpha)
这是我的一段非常原始的代码:
int len = strlen(source);
for (int i = 0; i < len; i++)
{
switch (source[i])
{
case 'a': source[i] = alpha[0];
case 'b': source[i] = alpha[1];
case 'c': source[i] = alpha[2];
................................
................................
................................
case 'y': source[i] = alpha[24];
case 'z': source[i] = alpha[25];
default: source[i] = source[i];
}
}
cout << source << endl;
它基本上应该使不超过 1000 个符号的输入字符串 source
将其所有小写符号 ('a' - 'z') 更改为已输入数组的相应符号(每个小写字母总共 26 个符号...'a' 随 a[0] 变化,'b' 随 b[1] 变化,等等)。
这里有几个问题:
- 我的代码不工作..输出总是一些奇怪的符号。我该如何解决?
- 如何缩短它?也许使用
for
语句代替switch
? - 当它工作时,我如何才能实现我在问题开头提到的功能(这可能是最重要的一个)?
仅作记录,这也是我的输入代码:
char source[1001];
cin.getline(source, 1001, '/n');
char alpha[27];
cin.getline(alpha, 27);
编辑:我将代码更改为:
#include <iostream>
#include <string>
using namespace std;
int main()
{
char source[1001];
cin.getline(source, 1001, '/n');
char alpha[27];
cin.getline(alpha, 27);
const int len = strlen(source);
for (int i = 0; i < len; i++)
{
if ('a' <= source[i] && source[i] <= 'z')
{
source[i] = alpha[source[i] - 'a'];
}
}
cout << source << endl;
return 0;
}
然而它变得更容易出错。现在我的控制台输入永远不会结束......从字面上看......点击 Enter 不会停止它......没有什么......当我将 source
的 cin.getline
更改为10
虽然再次返回了那些奇怪的符号,但它以某种方式结束了 - ╠╠╠╠
。
最佳答案
在 switch 语句中,当 case 匹配时,代码将执行以下所有 case,除非您在每个 case 的末尾使用 break
。您的代码总是失败并达到默认情况。
关于C++ 更改字符串函数中的小写字母(再次......),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21358150/