2013-08-19 5 views
16

द्वारा स्ट्रिंग शब्द का इनपुट लेना मैंने अभी सी ++ सीखना शुरू कर दिया है। मैं बस इसके साथ खेल रहा था और एक समस्या में आया जिसमें शब्द के द्वारा एक स्ट्रिंग शब्द इनपुट शामिल था, प्रत्येक शब्द एक सफेद जगह से अलग हो गया। मेरा मतलब है, मान लीजिए कि मेरे पासशब्द

name place animal 

इनपुट के रूप में है। मैं पहला शब्द पढ़ना चाहता हूं, इस पर कुछ ऑपरेशन करें। फिर दूसरा शब्द पढ़ें, उस पर कुछ ऑपरेशन करें, और फिर अगला शब्द पढ़ें, इसी तरह।

मैं इस

#include<iostream> 
    using namespace std; 
    int main() 
    { 
    string t; 
    getline(cin,t); 
    cout << t; //just to confirm the input is read correctly 
    } 

लेकिन तब की तरह getline साथ पहली बार में पूरी स्ट्रिंग भंडारण करने की कोशिश की है कि कैसे मैं प्रत्येक शब्द पर कार्रवाई करने और अगले शब्द पर चलते हैं?

साथ ही, सी ++ के आस-पास घूमते हुए मैंने कई जगहों पर देखा, "नेमस्पेस स्टडी का उपयोग करने" के बजाय लोग "std ::" लिखना पसंद करते हैं। यही कारण है कि? मुझे लगता है कि वे वही काम करते हैं। फिर बार-बार लिखने की परेशानी क्यों लें?

+0

[क्यों बुरा अभ्यास माना जाता है "नाम स्थान एसटीडी का उपयोग करते हुए" है?] (Http://stackoverflow.com/q/1452721/995714) –

उत्तर

44

वापस वचन के द्वारा एक stringstream और निकालने शब्द में लाइन रखो:

#include <iostream> 
#include <sstream> 
using namespace std; 

int main() 
{ 
    string t; 
    getline(cin,t); 

    istringstream iss(t); 
    string word; 
    while(iss >> word) { 
     /* do stuff with word */ 
    } 
} 
बेशक

, तो आप सिर्फ getline हिस्सा छोड़ सकते हैं और cin सीधे से शब्द से शब्द पढ़ सकते हैं।

और यहाँ आप पढ़ सकते हैं why is using namespace std considered bad practice.

+0

मैं CIN के साथ पढ़ने की कोशिश की। लेकिन चूंकि शब्दों को एक सफेद जगह से अलग किया जाता है, इसलिए सीन केवल पहला शब्द पढ़ना प्रतीत होता था। एक साधारण सीएन टी; cout टी; दिखाता है कि। इसलिए मैंने गेटलाइन पर स्विच किया। – aandis

+2

@zack जबकि लूप हल करता है कि "समस्या" – sehe

+0

@jrok आपके द्वारा दिए गए कोड पर संकलन त्रुटि प्राप्त कर रहा है। त्रुटि: परिवर्तनीय 'std :: istringstream iss' में प्रारंभकर्ता है लेकिन अपूर्ण प्रकार – aandis

1

getline एक ही बार में पूरी पंक्ति भंडारण किया जाता है, जो नहीं है तुम क्या चाहते। एक सरल फिक्स तीन चर है और उन सभी को प्राप्त करने के लिए सीन का उपयोग करें। सी ++ रिक्त स्थान पर स्वचालित रूप से पार्स होगा।

#include <iostream> 
using namespace std; 

int main() { 
    string a, b, c; 
    cin >> a >> b >> c; 
    //now you have your three words 
    return 0; 
} 

पता नहीं क्या विशेष "ऑपरेशन" आप के बारे में बात कर रहे हैं, तो मैं तुम्हें वहाँ मदद नहीं कर सकता, लेकिन अगर यह वर्ण बदल रहा है, स्ट्रिंग और सूचकांक के बारे में पढ़ें। सी ++ दस्तावेज बहुत अच्छा है। नामस्थान std का उपयोग करने के लिए के रूप में; बनाम std :: और अन्य पुस्तकालयों, पहले से ही बहुत कुछ कहा गया है। शुरू करने के लिए StackOverflow पर thesequestions आज़माएं।

+0

स्ट्रिंग में शब्दों की संख्या अज्ञात हैं। तब सिने के साथ शब्दों को पढ़ने के लिए कोई तरीका? – aandis

+0

http://stackoverflow.com/questions/8683302/how-to-split-a-space-separated-string-into-multiple-strings-in-c –

+0

आप getline और deliminating वर्णों के साथ कुछ भी कर सकते हैं http://www.minich.com/education/wyo/cplusplus/cplusplusch10/getfunction.htm –

3

और एक चार सरणी आप बस CIN उपयोग कर सकते हैं (यह जो दूसरों उल्लेख कर सकते हैं के लाभ के लिए है)। सिने इनपुट को पहले व्हाईटस्पेस से मुकाबला किया जाता है।

#include<iostream> 
using namespace std; 

main() 
{ 
    char word[50]; 
    cin>>word; 
    while(word){ 
     //Do stuff with word[] 
     cin>>word; 
    } 
}