2013-07-23 6 views
8

में शब्दों और रिक्त स्थानों की गणना करें मैं अपनी स्ट्रिंग में शब्दों और रिक्त स्थानों को गिनना चाहता हूं। स्ट्रिंग इस तरह दिखता है:स्ट्रिंग सी #

Command do something ptuf(123) and bo(1).ctq[5] v:0, 

मैं अब तक

int count = 0; 
string mystring = "Command do something ptuf(123) and bo(1).ctq[5] v:0,"; 
foreach(char c in mystring) 
{ 
if(char.IsLetter(c)) 
    { 
    count++; 
    } 
} 

क्या मैं भी रिक्त स्थान की गणना करने के लिए क्या करना चाहिए कुछ इस तरह है?

+4

तुमने कहा गिनती शब्द है, लेकिन आप पत्र गिनती कर रहे हैं। क्या आप यही चाहते थे? – Jonesopolis

+1

यह शब्द, वर्ण नहीं है। – Praveen

+1

आप सही हैं, मैंने अपने कोड में गलती की है। मैं शब्दों की गिनती करना चाहता हूं। माफ़ कीजिये। – user2592968

उत्तर

27
की संख्या है
int countSpaces = mystring.Count(Char.IsWhiteSpace); // 6 
int countWords = mystring.Split().Length; // 7 

ध्यान दें कि Char.IsWhiteSpace दोनों का उपयोग करें जो " " से दूसरे वर्णों को सफेद-स्थान (जैसे newline) मानते हैं। वास्तव में देखने के लिए टिप्पणी अनुभाग पर एक नज़र डालें।

+0

लॉल .... अगर मैं उस समय लिनक को समझता हूं तो मैंने उन तरीकों को लिखा था .... वैसे, क्या यह दो निष्कर्ष निकालने पर शब्दों को खत्म करता है? –

+0

@ डैनियल: नहीं, इसमें दो भूतपूर्व रिक्त स्थान मौजूद होने पर "भूत" शब्द शामिल होंगे। –

+0

मैं देखता हूं .... अभी भी मेरे उत्तर से बेहतर है, बस "भूत" आइटम हटा दें। –

2

जब आप एक स्ट्रिंग सरणी तत्वों की संख्या शब्दों की संख्या, और स्थानों की संख्या है मिलता है आप एक अंतरिक्ष http://msdn.microsoft.com/en-us/library/system.string.split.aspx

साथ string.Split उपयोग कर सकते हैं शब्द -1

0

यदि आप रिक्त स्थान की गणना करना चाहते आप LINQ का उपयोग कर सकते हैं:

int count = mystring.Count(s => s == ' '); 
+1

आपको तकनीकी रूप से +1 जोड़ना होगा। '" बी बी "। गणना (x => x == '')' = 2 जब 3 शब्द होते हैं। –

+0

क्या करें? यह केवल – Jonesopolis

0

मैं एक स्ट्रिंग में शब्दों की एक सूची प्राप्त करने के लिए कुछ तैयार कोड मिल गया है: (विस्तार के तरीकों, एक स्थिर कक्षा में होना चाहिए)

/// <summary> 
    /// Gets a list of words in the text. A word is any string sequence between two separators. 
    /// No word is added if separators are consecutive (would mean zero length words). 
    /// </summary> 
    public static List<string> GetWords(this string Text, char WordSeparator) 
    { 
     List<int> SeparatorIndices = Text.IndicesOf(WordSeparator.ToString(), true); 

     int LastIndexNext = 0; 


     List<string> Result = new List<string>(); 
     foreach (int index in SeparatorIndices) 
     { 
      int WordLen = index - LastIndexNext; 
      if (WordLen > 0) 
      { 
       Result.Add(Text.Substring(LastIndexNext, WordLen)); 
      } 
      LastIndexNext = index + 1; 
     } 

     return Result; 
    } 

    /// <summary> 
    /// returns all indices of the occurrences of a passed string in this string. 
    /// </summary> 
    public static List<int> IndicesOf(this string Text, string ToFind, bool IgnoreCase) 
    { 
     int Index = -1; 
     List<int> Result = new List<int>(); 

     string T, F; 

     if (IgnoreCase) 
     { 
      T = Text.ToUpperInvariant(); 
      F = ToFind.ToUpperInvariant(); 
     } 
     else 
     { 
      T = Text; 
      F = ToFind; 
     } 


     do 
     { 
      Index = T.IndexOf(F, Index + 1); 
      Result.Add(Index); 
     } 
     while (Index != -1); 

     Result.RemoveAt(Result.Count - 1); 

     return Result; 
    } 


    /// <summary> 
    /// Implemented - returns all the strings in uppercase invariant. 
    /// </summary> 
    public static string[] ToUpperAll(this string[] Strings) 
    { 
     string[] Result = new string[Strings.Length]; 
     Strings.ForEachIndex(i => Result[i] = Strings[i].ToUpperInvariant()); 
     return Result; 
    } 
0

टिम प्रविष्टि के अलावा, इस स्थिति में आप दोनों तरफ गद्दी, या एकाधिक रिक्त स्थान के लिए एक दूसरे के बगल में है:

Int32 words = somestring.Split(   // your string 
    new[]{ ' ' },       // break apart by spaces 
    StringSplitOptions.RemoveEmptyEntries // remove empties (double spaces) 
).Length;         // number of "words" remaining 
0

यहां रेगेक्स का उपयोग कर एक विधि है। विचार करने के लिए बस कुछ और। यह बेहतर है यदि आपके पास कई प्रकार के सफेद जगहों के साथ लंबे तार हैं। माइक्रोसॉफ्ट वर्ड के वर्डकाउंट की तरह।

var str = "Command do something ptuf(123) and bo(1).ctq[5] v:0,"; 
int count = Regex.Matches(str, @"[\S]+").Count; // count is 7 

तुलना के लिए,

var str = "Command  do something  ptuf(123) and bo(1).ctq[5] v:0,"; 

str.Count(char.IsWhiteSpace), 17 है, जबकि regex गिनती अभी भी 7

+0

_Some लोगों की गिनती के लिए था, जब किसी समस्या का सामना करना पड़ा, तो "मुझे पता है, मैं नियमित अभिव्यक्तियों का उपयोग करूंगा।" अब उनके पास दो समस्याएं हैं ._ –

+0

@BradChristie मुझे लगता है कि आप उस उद्धरण का दुरुपयोग कर रहे हैं। मैं यहां कुछ प्रकार का पार्सर नहीं लिख रहा हूं। यह सिर्फ गैर-व्हाइटस्पेस टेक्स्ट से मेल खाता है, और फिर आपको गिनती मिलती है। यह लगातार रिक्त स्थान की गणना नहीं करता है और जब आप पूरा कर लेते हैं तो संग्रह को साफ करने की आवश्यकता नहीं होती है। अभिव्यक्ति स्वयं उतनी ही बुनियादी है जितनी आप प्राप्त कर सकते हैं। समझना या बनाए रखना मुश्किल नहीं है। मुझे ऐसा नहीं लगता कि मैं कुछ गलत तरीके से कर रहा हूं, तो क्या आप समझ सकते हैं कि आपको लगता है कि उद्धरण इस समाधान पर लागू होता है? – Gray

+0

रेगेक्स कुछ परिदृश्यों में उपयोगी है, जब तक कि यह सरल रखा जाता है (यह एक है) और आसानी से रखरखाव योग्य (ऐसा लगता है) यह ठीक होना चाहिए। यह तब होता है जब आप इसे ओवरकिल करना शुरू करते हैं और अपने ईमेल पते को फ़िल्टर करने के लिए 15 लाइन लंबी रेगेक्स बनाते हैं, तब जब आप समस्याएं शुरू करते हैं। – user2366842

1

है यह ध्यान में रखना होगा:

  • स्ट्रिंग्स शुरू करने या के साथ समाप्त एक स्थान।
  • डबल/ट्रिपल/... रिक्त स्थान।

मानते हैं कि एकमात्र शब्द सेपरेटर्स रिक्त स्थान हैं और आपकी स्ट्रिंग शून्य नहीं है।

private static int CountWords(string S) 
{ 
    if (S.Length == 0) 
     return 0; 

    S = S.Trim(); 
    while (S.Contains(" ")) 
     S = S.Replace(" "," "); 
    return S.Split(' ').Length; 
} 

नोट: जबकि पाश भी एक regex के साथ किया जा सकता है: How do I replace multiple spaces with a single space in C#?

+1

आप जानते हैं '.Split' में एक अधिभार है जो' स्ट्रिंगस्प्लिटऑप्शन 'स्वीकार करता है, जो' RemoveEmptyEntries' निर्दिष्ट कर सकता है; '.Trim() 'और' Resplace' अनिवार्य हैं। –

+0

ठीक है, अनुस्मारक के लिए धन्यवाद। – TTT

0
using namespace; 
namespace Application; 
class classname 
{ 
    static void Main(string[] args) 
    { 
     int count; 
     string name = "I am the student"; 
     count = name.Split(' ').Length; 
     Console.WriteLine("The count is " +count); 
     Console.ReadLine(); 
    } 
} 
+0

कृपया कोड-केवल उत्तर पोस्ट न करें बल्कि बताएं कि आपका कोड क्या करता है। – David

संबंधित मुद्दे