簡體   English   中英

C#:如何使用數組,字符和字符串? 需要清理

[英]C#: How to use arrays, chars and strings? Clear up needed

我是編程新手,我的Algorithm類中有一個項目。 我們要做的是確定問題並加以解決。 我們對字符串,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個字母處被剪掉...有人告訴我,使用數組可以解決此問題。 鑒於我是一個新手,所以我需要將其分解並盡可能簡單地告知!

任何幫助使它起作用的方法,將不勝感激。

謝謝 :)

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);

將char1寫入控制台后,使用如下所示的for循環:

if (str.Length > 1)
{
    for (int i = 1; i < str.Length; i++)// Start at 1 to skip char1
    {
        Console.Write(str[i]);
    }
}

您可以對string調用一些方法,這些方法會有所幫助:

  • Substring
  • ToUpper

實際上,您不必擔心字符。 僅使用字符串即可解決此問題。

還應注意檢查代碼是否處理了字符串為空的情況(使用if語句),如果用戶僅按Enter鍵而不輸入任何內容,則將發生這種情況。

您正在學習算法課程,它們使您選擇要解決的問題? 聽起來對學習的人來說很危險。

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語句。 原因很多,其中一個是(我認為)它們使代碼難以閱讀和維護。

另外,如果您的代碼按編寫的方式工作,它將永遠不會結束。 您編寫的程序將執行,然后再次開始,永不停止。 如果您想要這種行為,則應將代碼包裝在無限循環中,該循環在某些情況下會退出。 這可能看起來像:

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

關於最后一條語句,我忘記了是否需要在調用.equals方法之前將ReadLine的輸出強制轉換為字符串...我沒有啟動我的IDE。 我想你應該已經明白了。

編輯:我看到了另一個關於使用.ToUpper方法的.ToUpper 我想到了,但假設您可能需要使用char類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM