【发布时间】:2014-01-26 00:36:18
【问题描述】:
又是我。在我所有的问题中,我认为这是所有问题中最愚蠢的,但由于疲劳或愚蠢,我也需要一些帮助。然而,最重要的是,我这样做是为了我的一项任务,并且有一个严格的规则 - 我必须使用一个函数 称为
char* encode(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;
它基本上应该使输入的字符串source不超过1000个符号将其所有小写符号('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 不会停止它..什么都不会..当我将我的 cin.getline for source 更改为 10 它以某种方式结束但又返回了那些奇怪的符号- ╠╠╠╠.
【问题讨论】:
-
switch-case 需要
break; -
很不清楚,你的问题是什么。到达一个显着点(显示编译器错误、调试结果、意外输出等)
-
@BLUEPIXY 好地方,在所有这些混乱中;) ...
-
这段代码并不像你想象的那么原始。从
'a'到'z'的扩展比最初看起来显而易见的用途更多,特别是在'a'..'z'不连续的系统上(例如:EBCDIC)。除非您打算包含breakstmts,或者向我们展示真实代码,否则自分配是无用的,最后两个分配除外。 -
去掉最后一个
getline()参数。您的意思可能是“\n”(注意正确的斜杠转义字符),但您不需要它,因为换行符是默认终止符。
标签: c++ string function pointers