1

好的,我正在学习 C++ 课程并尝试构建一个控制台程序,用户输入他/她的姓名,然后程序根据用户姓名的每个字母输出一个新名称。

我试图用一个字符串来做这个,但还没有找到如何正确地将字符串转换为每个字母的 int。

我在这个程序中唯一拥有的是每个 char 的替换字符串,但是 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 个字母,并且基于“忍者名称”图片。

我提前感谢您的帮助!

4

2 回答 2

0
    #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++ 中,但它可以满足我的需求。
一个字符串是一个字符数组,一个字符只是一个数字。

编辑
将代码更新为 c++,进而修复 James Kanze 指出的问题

于 2013-03-28T14:21:48.150 回答
0

据我了解,您正在尝试使用用户输入的每个字符中的 ASCII 码并将其替换为另一个字符串。

我个人有两种方法:

  1. 我会维护你在那里的数组。对于用户输入中的每个字符,我将测试它是否是大写/小写字符,如果是,我将相对于 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;
}

谷歌 ASCII 表。

另一种解决方案包括使用 std::map,但在性能和简单性方面,上述解决方案会更好。

于 2013-03-28T14:53:05.750 回答