好的,我正在使用一个c++类,并试图构建一个控制台程序,用户输入他/她的名字,然后该程序根据用户名的每个字母输出一个新名字。
我正在尝试用字符串来做这件事,但是还没有找到如何正确地将字符串转换为每个字母的和int。
我在这个程序中唯一的东西是每个字符的替换字符串,但是google和stackoverflow没有显示任何我可以应用于我当前的情况。这是我的字符串:
string ninjaName[28] = {"ka", "zu", "mi", "te", "ku", "lu","ji",
"ri", "ki", "zu", "me", "ta", "rin", "to", "mo", "no","no",
"ke", "shi", "ari", "chi", "do", "ru", "mei", "na", "fu", "zi"};
该字符串代表字母表中的28个字母,并基于"忍者的名字"图片。
我提前感谢你的帮助!据我所知,您试图使用用户输入的每个字符的ASCII码,并将其替换为另一个字符串。
我个人有两种方法:
- 我会维护你在那里的数组。对于用户输入中的每个字符,我将测试它是否是大写/小写字符,如果是,我将相对于ASCII表索引ninjaName数组。
的例子:
#include <ctype.h>
#include <iostream>
#include <string>
std::string ninjaName[28] = {"ka", "zu", "mi", "te", "ku", "lu","ji",
"ri", "ki", "zu", "me", "ta", "rin", "to", "mo", "no","no",
"ke", "shi", "ari", "chi", "do", "ru", "mei", "na", "fu", "zi"};
int main(void)
{
std::string input, newName;
std::getline(std::cin,input);
newName = "";
char c;
for(unsigned int i=0; i < input.length(); ++i)
{
c = input[i];
if (!isalpha(c))
newName += c;
else
newName += ninjaName[tolower(c) - 'a'];
}
std::cout << "Generated name: " << newName << std::endl;
std::cin.get();
return 0;
}
Google ASCII表。
另一个解决方案是使用std::map,但是在性能和简单性方面,上面的解决方案更好。
#include<iostream>
#include <string>
using namespace std;
string ninjaName[28] = {"ka", "zu", "mi", "te", "ku", "lu","ji",
"ri", "ki", "zu", "me", "ta", "rin", "to", "mo", "no","no",
"ke", "shi", "ari", "chi", "do", "ru", "mei", "na", "fu", "zi"};
int main()
{
string name,outstr;
int cindex=0;
cout << "Enter Your Name:t";
cin >> name;
size_t sz = name.size();
for (int i = 0; i < sz; i++)
{
if(!isalpha(name[i]))
{
outstr+=name[i];
continue;
}
cindex = tolower(name[i])-'a';
outstr.append(ninjaName[cindex]);
}
cout << "nyour new Ninja Name is:t" <<outstr << "n";
return 0;
}
这主要是在C中,而不是c++中,但是它做了我认为你正在寻找的。
string是一个字符数组,而char只是一个数字。
编辑
将代码更新为c++,从而修复了James Kanze指出的问题