1

さて、私はC++クラスを受講していて、ユーザーが自分の名前を入力するコンソールプログラムを構築しようとしています。プログラムは、ユーザー名のすべての文字に基づいて新しい名前を出力します。

私は文字列でこれを行おうとしていますが、文字列を各文字の int に適切に変換する方法をまだ見つけていません。

このプログラムにあるのは、各文字の置換文字列だけですが、Google とスタックオーバーフローは、現在の状況に適用できるものを何も示していません。これが私の文字列です:

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

私が理解できることから、ユーザーの入力の各文字から ASCII コードを使用し、それを別の文字列に置き換えようとしています。

個人的には以下の2つの方法があります。

  1. あなたがそこに持っている配列を維持します。ユーザーの入力の各文字について、大文字/小文字のいずれかであるかどうかをテストし、そうである場合は、ninjaName 配列を ASCII テーブルに対して相対的にインデックス付けします。

例:

#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 を使用することですが、パフォーマンスと単純さの両方に関して、上記の解決策の方が優れています。

于 2013-03-28T14:53:05.750 に答える
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ですが、あなたが探していると思います。
文字列は文字の配列で、文字は単なる数値です。

Edit
はコードを C++ に更新し、James Kanze が指摘したように問題を修正しました。

于 2013-03-28T14:21:48.150 に答える