2011-07-10 10 views
0

ユーザーが指定した時間に異なる長さの実行時に文字列を入力するようにユーザーに要求するプログラムをCまたはC++で作成したい(スペース区切りまたは非スペース区切りのいずれか)それを配列に格納します。サンプルコードをCとC++で教えてください。CおよびC++での文字列入力

1st run: 
Enter string 
Input: Foo 

char array[]="foo";

2nd run: 
Enter string 
Input: 
Pool Of 

char array[]="Pool Of";

私が試してみました:

#include<iostream> 
using namespace std; 

int main() 
{ 
    int n; 
    cout<<"enter no. of chars in string"; 
    cin>>n; 
    char *p=new char[n+1]; 
    cout<<"enter the string"<<endl; 
    cin>>p; 
    cout<<p<<endl; 
    cout<<p; 
    return 0; 
} 

をしかし、文字列がスペースを分離する場合、それは働いていません。

私もこれを試しましたが、うまくいきません。

#include <iostream> 
using namespace std; 
int main() 
{ 
    int n; 
    cout<<"enter no. of chars in string"; 
    cin>>n; 
    char *p=new char[n+1]; 
    cout<<"enter the string"<<endl; 
    cin.getline(p,n); 
    cout<<p<<endl; 
    cout<<p; 
    return 0; 
} 
+0

私はgetl​​ineで試してみました –

+2

コードを投稿し、難しい部分を説明してください。これはCまたはC++であるはずですか? –

+0

これはCまたはC++のいずれかです。 –

答えて

2

getlineを使用してください。

この例を見てください:あなたは、いくつかのターミネーター(例えば改行)を満たすまで、標準入力から文字を読んで、あなたの一時的な文字列(文字の最後にその文字を追加する必要が
http://www.cplusplus.com/reference/iostream/istream/getline/

+0

しかし、文字列の長さを与えることをユーザーに求めていません。コンパイル時に静的にchar配列を宣言しています。実行時にarrrayを初期化します。 –

+1

@ gautam-kumar私はあなたのためにプログラムを書いていなければ、あなたがそれを行うことができると確信しています。投稿したコードのようにバッファを割り当てます。この例に示すようにgetlineを使用します。 – log0

+0

:私はそれを試しましたが、動作していません。それを見てくださいね。 –

0

*を)。このすべての場合、オーバーフローを手動で制御し、必要に応じて配列を再配置(再割り当て+コピー)する必要があります。

+0

スタックオーバーフローへようこそ – Tom

0

Enterを押すと、cin.getline()に供給される余分なcharを処理する必要があります。それが処理されていれば正常に動作します。これはWindowsでのcinの動作です。 Linuxでも同じことが起こる可能性があります。 Windowsでこのコードを実行すると、必要なものが得られます。

#include <iostream> 
using namespace std; 

int main() { 
    int n; 

    // Take number of chars 
    cout<<"Number of chars in string: "; 
    cin>>n; 

    // Take the string in dynamic char array 
    char *pStr = new char[n+1]; 
    cout<<"Enter your string: "<<endl; 

    // Feed extra char 
    char tCh; 
    cin.get(tCh); 

    // Store until newline 
    cin.getline(pStr, n+1); 
    cout<<"You entered: "<<pStr<<endl; 

    // Free memory like gentle-man 
    delete []pStr; 

    // Bye bye 
    return 0; 
} 

HTH!

+0

紳士的ではない - 'delete [] pStr' ;-)を使用する必要があります – Tim

+0

私はそれを編集しました。 :) –

関連する問題