这又是我。在我所有的问题中,我认为这是最愚蠢的,但无论是由于疲劳还是愚蠢,我都需要一些帮助。然而,最重要的是,我正在为我的作业做这个,并且有一个严格的规则 - 我必须使用一个函数 名为
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'用[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
source
更改为10
时,它以某种方式结束了虽然再次返回那些奇怪的符号 - ╠╠╠╠
。
答案 0 :(得分:3)
在switch语句中,当案例匹配时,除非在每种情况结束时使用break
,否则代码将执行以下所有情况。您的代码总是不断下降并达到默认情况。
答案 1 :(得分:1)
您的switch语句会执行每一步,因为您从不break
或return
。
更好:
for (int i = 0; i < len; i++) {
if('a' <= source[i] && source[i] <= 'z') {
source[i] = alpha[source[i] - 'a'];
}
}
说明:
source[i] - 'a'
0
为'a'
,1
为'b'
等。它概括了您的模式。
答案 2 :(得分:1)
使用cstring
代替string
:
#include <cstring>
并将switch
替换为if (source[i] >= 'a' && source[i] <= 'z') ...
这是您的最终代码:https://eval.in/95037
#include <iostream>
#include <cstring>
using namespace std;
void encode(char *source, const char *alpha)
{
int i, j;
int len = strlen(source);
for (i = 0; i < len; i++) {
if (source[i] >= 'a' && source[i] <= 'z') {
j = source[i] - 'a';
source[i] = alpha[j];
}
}
}
int main(void)
{
char source[1001];
char alpha[27];
cin.getline(source, 1000);
cin.getline(alpha, 27);
encode(source, alpha);
cout << source << endl;
return 0;
}
答案 3 :(得分:0)
如果你被允许,你可以忽略c风格的字符串alpha并使用cctype函数toupper(c)。
#include <cctype>
for (size_t i = 0; i < strlen(source); i++) {
source[i] = toupper(source[i]);
}
答案 4 :(得分:0)
在c ++中:
#include <algorithm>
#include <string>
wstring toLower(const wstring& str)
{
wstring temp = str;
std::transform(temp.begin(), temp.end(), temp.begin(), ::towlower);
return temp;
}
//---------------------------------------------------------------------------------------------------------------------
string toLower(const string& str)
{
string temp = str;
std::transform(temp.begin(), temp.end(), temp.begin(), ::tolower);
return temp;
}