public static void Main()
{
string s ="USA";
Console.WriteLine(DetectCapitalUse(s));
Console.ReadKey();
}
public static bool DetectCapitalUse(string word)
{
for (int i = 0; i < word.Length; i++)
{
if (System.Text.RegularExpressions.Regex.Matches(word[0].ToString(), "[A-Z]").Count >0 && System.Text.RegularExpressions.Regex.Matches(word[0].ToString(), "[a-z]").Count > 0)
{
return true;
}
else if (System.Text.RegularExpressions.Regex.Matches(word[i].ToString(), "[A-Z]").Count > 0)
{
return true;
}
else if (System.Text.RegularExpressions.Regex.Matches(word[0].ToString(), "[A-Z]").Count > 0)
{
return true;
}
else
{
return false;
}
}
return true;
}
uj5u.com熱心網友回復:
只走了一個U判斷,怎么能讓for回圈走完呢,讓他把string里的所有值都判斷一遍uj5u.com熱心網友回復:
return 換成 continueuj5u.com熱心網友回復:
return的意思是回傳到方法的呼叫方你的寫法表示只要有一個分支滿足條件就結束回圈了
uj5u.com熱心網友回復:
這代碼慘不忍睹啊……既然用了正則,直接
string s ="USA";
var result=Regex.IsMatch(s,"[A-Z]");//判斷出s是否包含大寫字母
//var result=!Regex.IsMatch(s,"[^A-Z]");//判斷 s是否全部由大寫字母組成
,就能判斷出s是否包含大寫字母。
按你的思路,回頭再看回圈的問題,首先,假定你需要判斷的是全部由大寫字母組成,那么最終的結果應該是
每個word[i]都必須是大寫字母,也就是在遍歷的時候,取每個字符進行判斷,并對結果進行邏輯與運算;
也可以在回圈時,設定非大寫字母為跳出條件
for(……){
if(非大寫) return false;
}
return true;
uj5u.com熱心網友回復:
另外,回圈結構里,結束本次回圈,進入下次回圈,用continue;return直接結束當前方法并回傳(所以肯定也就跳出了當前方法里的回圈結構)
uj5u.com熱心網友回復:
你到底要干啥uj5u.com熱心網友回復:
我們不知道你邏輯上想干嘛。因為我們不知道你到底是要IEnumerable<bool>(不做邏輯,只單純需要每一個字符的結果),還是要Any(任意一個滿足),還是要All(全滿足)uj5u.com熱心網友回復:
回傳值寫什么uj5u.com熱心網友回復:
就是一道演算法我想用自己的思路寫一下uj5u.com熱心網友回復:
就是想滿足一個分支就結束,但是哦判斷不全string里的字符,uj5u.com熱心網友回復:
這個方法為什么沒有走完,是因為for回圈時,只要有一個方法滿足條件,就會return true;return 意味著要跳出for回圈,跳出方法,將return的值作為DetectCapitalUse這個方法回傳值。這個方法如果能把for中所有資料全部走完,那說明for回圈中沒有一個分支符合條件。
uj5u.com熱心網友回復:
全部字母都是大寫,比如"USA"。
單詞中所有字母都不是大寫,比如"leetcode"。
如果單詞不只含有一個字母,只有首字母大寫, 比如 "Google"。
滿足其中一個
uj5u.com熱心網友回復:
全部字母都是大寫,比如"USA"。
單詞中所有字母都不是大寫,比如"leetcode"。
如果單詞不只含有一個字母,只有首字母大寫, 比如 "Google"。
這是三個判斷條件
uj5u.com熱心網友回復:
全部字母都是大寫,比如"USA"。
單詞中所有字母都不是大寫,比如"leetcode"。
如果單詞不只含有一個字母,只有首字母大寫, 比如 "Google"。
滿足其中一個即可
uj5u.com熱心網友回復:
不知道你要做什么,但如果你即想走完回圈,又想有回傳值,那么你可以在回圈體外定義一個變數,在回圈體里修改變數值,在結束回圈體的時候,再回傳你之前定義的變數值。
uj5u.com熱心網友回復:
回傳值寫什么 return 換成 continue
不知道你要做什么,但如果你即想走完回圈,又想有回傳值,那么你可以在回圈體外定義一個變數,在回圈體里修改變數值,在結束回圈體的時候,再回傳你之前定義的變數值。
全部字母都是大寫,比如"USA"。
單詞中所有字母都不是大寫,比如"leetcode"。
如果單詞不只含有一個字母,只有首字母大寫, 比如 "Google"。
這是三個滿足條件
讓前三個if回傳true,最后一個else回傳false,但是我又想到一個別的問題,如果字串進入了不同的if ,假如說第一次進入了第一個,第二次進入第二個,第三次又進入了第四個,那到底應該以哪一個為基準呢!
uj5u.com熱心網友回復:
回傳值寫什么 return 換成 continue
不知道你要做什么,但如果你即想走完回圈,又想有回傳值,那么你可以在回圈體外定義一個變數,在回圈體里修改變數值,在結束回圈體的時候,再回傳你之前定義的變數值。
全部字母都是大寫,比如"USA"。
單詞中所有字母都不是大寫,比如"leetcode"。
如果單詞不只含有一個字母,只有首字母大寫, 比如 "Google"。
這是三個滿足條件
讓前三個if回傳true,最后一個else回傳false,但是我又想到一個別的問題,如果字串進入了不同的if ,假如說第一次進入了第一個,第二次進入第二個,第三次又進入了第四個,那到底應該以哪一個為基準呢!
按照你描述的需求,用正則運算式一條陳述句就可以了,用不著for回圈。
不過你如果只是想嘗試一下用for回圈演算法實作,那么給你個簡單的思路,你可以先定義3個變數,
int a; //大寫字母個數
int b; //小寫字母個數
int c; //大寫字母位置
然后在回圈每個字母的時候,判斷是大寫還是小寫,把對應的變數+1,如果是大寫,把當前位置賦給c
然后在完成回圈之后直接
return (a==word.Length || b==word.Length || (a==1 && c==0));
uj5u.com熱心網友回復:
回傳值寫什么 return 換成 continue
不知道你要做什么,但如果你即想走完回圈,又想有回傳值,那么你可以在回圈體外定義一個變數,在回圈體里修改變數值,在結束回圈體的時候,再回傳你之前定義的變數值。
全部字母都是大寫,比如"USA"。
單詞中所有字母都不是大寫,比如"leetcode"。
如果單詞不只含有一個字母,只有首字母大寫, 比如 "Google"。
這是三個滿足條件
讓前三個if回傳true,最后一個else回傳false,但是我又想到一個別的問題,如果字串進入了不同的if ,假如說第一次進入了第一個,第二次進入第二個,第三次又進入了第四個,那到底應該以哪一個為基準呢!
按照你描述的需求,用正則運算式一條陳述句就可以了,用不著for回圈。
不過你如果只是想嘗試一下用for回圈演算法實作,那么給你個簡單的思路,你可以先定義3個變數,
int a; //大寫字母個數
int b; //小寫字母個數
int c; //大寫字母位置
然后在回圈每個字母的時候,判斷是大寫還是小寫,把對應的變數+1,如果是大寫,把當前位置賦給c
然后在完成回圈之后直接
return (a==word.Length || b==word.Length || (a==1 && c==0));
剛才我去評論區翻了一下這個可能和你說的差不多
char[] cs = word.toCharArray();
int upper = 0;//大寫字母個數
int lower = 0;//小寫字母個數
for(int i=0;i<cs.length;i++) {
if(cs[i]>='a') {
lower++;
}else {
upper++;
}
}
if(upper==cs.length) { //全大寫
return true;
}
if(lower==cs.length) {//全小寫
return true;
}
if(upper==1 && cs[0]<'a') {//首字母大寫
return true;
}
return false;
uj5u.com熱心網友回復:
補充一下,用一條陳述句的寫法:return Regex.IsMatch("^[A-Z]+$") || Regex.IsMatch("^[a-z]+$") || Regex.IsMatch("^[A-Z][a-z]*$")
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/285242.html
標籤:C#
上一篇:動態加載WebService問題
下一篇:構造方法
