将名称转换为数字,然后生成输出 < >我正在攻读C++类,我正在尝试构建一个控制台程序,用户输入他/她的名字,然后程序根据用户名的每一个字母输出一个新的名字。

将名称转换为数字,然后生成输出 < >我正在攻读C++类,我正在尝试构建一个控制台程序,用户输入他/她的名字,然后程序根据用户名的每一个字母输出一个新的名字。,c++,string,visual-c++,C++,String,Visual C++,我试图用一个字符串来实现这一点,但还没有找到如何正确地将字符串转换为每个字母的和int 在这个程序中,我唯一拥有的是每个字符的替换字符串,但是google和stackoverflow没有显示任何可以应用于我当前情况的内容。 这是我的字符串: string ninjaName[28] = {"ka", "zu", "mi", "te", "ku", "lu","ji", "ri", "ki", "zu", "me", "ta", "rin", "to", "mo", "no","no",

我试图用一个字符串来实现这一点,但还没有找到如何正确地将字符串转换为每个字母的和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个字母,基于“忍者姓名”图片

我提前感谢你的帮助

#包括
    #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;
}
#包括 使用名称空间std; 字符串ninjaName[28]={“ka”、“zu”、“mi”、“te”、“ku”、“lu”、“ji”, “日”、“基”、“祖”、“我”、“塔”、“林”、“to”、“mo”、“no”、“no”, "可,","时","日","气","做","如",; int main() { 字符串名,outtr; int-cindex=0; 姓名; size_t sz=name.size(); 对于(int i=0;icout据我所知,您试图使用用户输入的每个字符的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;
    }
    
    #包括
    #包括
    #包括
    字符串ninjaName[28]={“ka”、“zu”、“mi”、“te”、“ku”、“lu”、“ji”,
    “日”、“基”、“祖”、“我”、“塔”、“林”、“to”、“mo”、“no”、“no”,
    "可,","时","日","气","做","如",;
    内部主(空)
    {
    std::字符串输入,newName;
    std::getline(std::cin,输入);
    newName=“”;
    字符c;
    for(无符号整数i=0;istd::字母表中有28个字母吗?两个额外的字母是什么?@Talnocolas,我要说假名。@Talnocolas这些名字看起来不像拉丁字母表中的名字。(在这个问题上,拉丁字母只使用了21个字符,而现代瑞典语使用了29个字符。即使在拉丁字母表中,字符的数量也不尽相同。)我只计算了27个字。@chris或者更一般地说,他实际上想做什么?听起来有点像他在寻找名字中字母的随机排列,但我不是很确定。另一方面,你提出的解决方案假设是ASCII码。这很可能,但仍然有使用其他编码的机器。我的算错了,我只是简单地把它吐出来,这样我就可以在我的问题中添加一个参考代码。列出了27个“忍者”字符,其中两个是“否”.当我有26个问题时,我一直遇到一个错误,只是不想花时间来纠正这个问题。我将确保在将来安抚这些巨魔。:D感谢你的帮助鲁本·科尔代罗。我将不得不研究其中的大部分,以了解它的功能!它在桌面检查后会输出一个正确的名称。feel fre请记住:了解C/C++(特别是后者)主要是了解如何使用标准库。它也可能崩溃(例如,如果用户输入的名称超过64个字符)。(每次在循环中给strlen打电话都是很糟糕的做法。)@JamesKanze你在这两个方面都很对,我把它从头顶上敲了下来,还没有测试过,谢谢。我会编辑它来修正这两点。