2

私はプログラミングが初めてで、アルゴリズムクラスにプロジェクトがあります。私たちがしなければならないことは、問題を決定し、それを解決することです。string、char、および WriteLine 以外のことはあまり学んでいません。すぐにわかるように、いくつかのことを追加しました。

これを解決したいことを決めました。ユーザーが単語をどれだけ長く挿入しても、プログラムは自動的に最初の文字を大文字にします。これまでのところ、これは私が持っているものです:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
    static void Main(string[] args)
    {
    start:
        Console.WriteLine("Please enter a word below:");
        Console.WriteLine("");
        string str = Console.ReadLine();
        char char1;
        if (str[0] >= 97)
        {
            char1 = (char)(str[0] - 32);
        }
        else
        {
            char1 = (char)(str[0] + 32);
        }

        char char2 = (char)(str[1]);
        char char3 = (char)(str[2]);
        char char4 = (char)(str[3]);
        char char5 = (char)(str[4]);
        Console.WriteLine("");
        Console.Write(char1);
        Console.Write(char2);
        Console.Write(char3);
        Console.Write(char4);
        Console.WriteLine(char5);
        goto start;
}
}
}

このコードの問題点は、5 文字未満の単語を使用するとプログラムがクラッシュすることです。5 文字を超えるものは、5 文字目で切り捨てられます...配列を使用すると、この問題が解決するはずだと言われました。私はこれについてまったくの初心者であるため、これを分解して、できるだけ簡単に説明する必要があります。

これを機能させるための助けをいただければ幸いです。

ありがとう :)

4

4 に答える 4

2
Console.WriteLine("Enter a word:");
string str = Console.ReadLine();
Console.WriteLine(str[0].ToString().ToUpper() + str.Substring(1));

これは機能します。

または...文字列全体を調べて最初の実際のアルファベット文字を見つける必要がある場合は、次のことができます。

Console.WriteLine("Please enter a word:");
string s = Console.ReadLine();
bool found = false;
char[] chars = new char[s.Length];
for (int i = 0; i < s.Length; i++)
{
    if (Char.IsLetter(s[i]) && !found)
    {
         chars[i] = s[i].ToString().ToUpper()[0];
         found = true;
    }
    else
    {
        chars[i] = s[i];
    }
}
s = new String(chars);
Console.WriteLine(s);
于 2012-10-25T22:05:10.283 に答える
1

char1 をコンソールに書き込んだ後、次のような for ループを使用します。

if (str.Length > 1)
{
    for (int i = 1; i < str.Length; i++)// Start at 1 to skip char1
    {
        Console.Write(str[i]);
    }
}
于 2012-10-25T22:15:42.563 に答える
1

呼び出すことができる便利なメソッドがいくつかありstringます。

  • Substring
  • ToUpper

実際、文字について心配する必要はありません。この問題は、文字列のみを使用して解決できます。

また、コードが (ステートメントを使用して) 文字列が空の場合を処理することを確認するように注意してください。ifこれは、ユーザーが何も入力せずに単に押した場合に発生しEnterます。

于 2012-10-25T22:35:04.540 に答える
0

アルゴリズムのクラスを受講していて、解決する問題を選択する必要がありますか? 学習している人にとっては危険に聞こえます。

Console.WriteLine("Please enter a word below:");
Console.WriteLine("");
string inputString = Console.ReadLine();    // try to use meaningful variable names

// shorthand for the if ... else block:
// type variableName = (true/false condition) ? "is true" : "is false";
char firstChar = inputString[0] >= 97 ? (char)(inputString[0] - 32) : (char)(inputString[0] + 32);

Console.WriteLine("");
Console.Write(firstChar);

for (int i = 1; i < inputString.Length; i++)    // skip firstChar
{
    Console.Write(inputString[i]);
}

他の人が述べたように、一般的な解決策に似たものが必要な場合は、これにループを使用する必要があります。

また、goto ステートメントの使用を避ける必要があります。理由はたくさんありますが、その 1 つは (私の意見では) コードを読みにくく、保守しにくくしているからです。

さらに、コードが書かれたとおりに機能した場合、それは決して終わらないでしょう。あなたのプログラムは、書かれたとおりに実行され、その後再び開始され、停止することはありません。この種の動作が必要な場合は、何らかの条件で終了する無限ループでコードをラップする必要があります。これは次のようになります。

bool keepRunning = true;
while(keepRunning){
    //code here
    Console.Write("go again? (y/n) ");
    keepRunning = (string)(Console.ReadLine()).equals("y") ? false : true;  
}

最後のステートメントで、 .equalsメソッドを呼び出す前に ReadLine の出力を文字列にキャストする必要があるかどうかを忘れていました... IDE が起動していません。私はあなたがアイデアを得ると思います。

編集:メソッドの使用について提起されたばかりの別の応答を見ました.ToUpperchar私はこれについて考えましたが、タイプを使用する必要があると思いました。

于 2012-10-25T22:39:39.570 に答える