我正在嘗試撰寫一種方法來確定僅包含字母的字串是否是等值線。(等值線是一個沒有重復字母的單詞,連續的或不連續的。)這是我的代碼:
***static bool IsIsogram(string str)
{
for (int i = 0; i <= str.Length; i )
{
for (int j = 0; j < i; j )
{
if (string.Compare("str[i]", "str[j]") == 0)
{
return false;
}
else if (string.Compare("str[i]", "str[j]") == 1)
{
return true;
}
}
}
}
IsIsogram("Hello");***
編輯:這個怎么樣:
static bool IsIsogram(string str) {
foreach (char c in str) {
for (int i = 0;i<=str.Length;i ) {
if (c == str[i]) {
return false;
}
else {
return true;
}
}
}
}
IsIsogram("Hello");
uj5u.com熱心網友回復:
編輯中的代碼有兩個問題。首先,它只檢查第一個字符并總是回傳一個值,而不實際檢查整個字串。該函式應僅在已確定字串不是等值線時停止檢查。簡單地說,回傳 true 應該是在兩個回圈都完成之后。
第二個問題是它檢查字串中的每個字符,包括當前字符。基本上,如果輸入是“Bar”,它會首先檢查'B' == 'B',然后認為B出現了兩次,而實際上它只有一次。要解決此問題,您需要跳過當前字符。在代碼中,這看起來像if (i == j) continue;
static bool IsIsogram(string str) {
for (int j = 0; j < str.Length; j ) {
for (int i = 0; i < str.Length; i ) {
if (j == i) continue;
if (str[j] == str[i]) {
return false;
}
}
}
return true;
}
此代碼也可以通過設定為來優化i而j 1不是0,因為不需要檢查已經檢查過的字符。這也將消除if (i == j)在回圈中檢查的需要,因為i永遠不能等于jifi >= j 1
偽代碼(未經測驗):
static bool IsIsogram(string str) {
for (int j = 0; j < str.Length; j ) {
for (int i = j 1; i < str.Length; i ) {
if (str[j] == str[i]) {
return false;
}
}
}
return true;
}
uj5u.com熱心網友回復:
您真正想要做的就是在將字母設定為大寫/小寫以進行比較后檢查是否有任何重復的字符。
static bool IsIsogram(string str)
{
return str.ToLower().Distinct().Count() == str.Length;
}
uj5u.com熱心網友回復:
嘗試這個,
string str = "hello";
int[] ival = str.Select(a => Convert.ToInt32(a)).ToArray();
Array.Sort(ival);
for(int i=0; i<ival.Count()-1; i )
{
if (ival[i]==ival[i 1])
{
Console.WriteLine("isogram");
break;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/429476.html
