2015-12-04 21 views
6

文字列の最初の8文字をC言語で取得しようとしていますが、今現在行っていることは最初の8文字を出力できますが、それはまだ8文字の長さですが、これは私が望むものではありません。文字列の最初の数文字のみを選択するC++

string message = "  "; 

    const char * word = holder.c_str(); 

    for(int i = 0;i<message.length();i++) 
     message[i] = word[i]; 

ホルダーは、このコードの後に​​「123456789abc」が含まれている場合、それは 「12345678」が含まれますただし、ホルダーに「1234」が含まれている場合は、このメッセージの後にアンダースコアが空白の「1234____」が含まれます。

これを行う簡単な方法があります。事前にお手伝いいただきありがとうございます。また、8文字の空文字列を作成するのはかなり恐ろしいことだと私は確信しています。

+0

「文字列の残りの文字を削除する」と言うとき、元の文字列を意味しますか?また、スペースのポイントは何ですか? –

+0

私は明確にするために質問を編集しようとしましたが、あいまいでした。空白は、文字列message = ""を使用しただけでループを通過したときに範囲外のエラーが発生したためです。私は今substrを使用しており、動作しています。ありがとう! – chrisz

答えて

8

だけstd::string::substrを使用します。

std::string str = "123456789abc"; 
std::string first_eight = str.substr(0, 8); 
+2

彼の質問はあいまいであり、答えが正しいかどうかを判断する方法はありません。それはOPが "文字列の残りの文字列を文字列から削除する"の "文字列"の意味に依存します。 –

+0

最初の文字列が8文字未満の場合、substrを実行すると文字列について何か変更されますか?しかし、迅速な答えをいただきありがとうございます、それは完璧に働いた。 – chrisz

+0

@qlearあなたはドキュメントを読むべきです - 'substr()'はconstメソッドです。すなわち、どのような条件下でもオブジェクト自身を変更しません。 – Slava

6

は単なる文字列にresizeを呼び出します。

3

私が正しく理解している場合は

const char *s = "Some string"; 

std::string message(s, std::min<size_t>(8, std::strlen(s)); 
-1
char* messageBefore = "12345678asdfg" 
int length = strlen(messageBefore); 
char* messageAfter = new char[length]; 

for(int index = 0; index < length; index++) 
{ 
    char beforeLetter = messageBefore[index]; 
    // 48 is the char code for 0 and 
    if(beforeLetter >= 48 && beforeLetter <= 57) 
    { 
     messageAfter[index] = beforeLetter; 
    } 
    else 
    { 
     messageAfter[index] = ' '; 
    } 
} 

これが作成されますあなたは、あなたが、たとえば記述できる文字列から文字を取得する必要がありJfにあなたがちょうど

std::string message = holder.substr(0, 8); 

を書きます適切なサイズの文字配列を作成し、すべての数値文字(0〜9)を転送し、非数値を空白に置き換えます。これは、あなたが探しているもののように聞こえる。

あなたの質問に基づいて他の人が解釈したことを考えれば、数字の部分だけを含む結果の文字列を得るために上記の方法を簡単に変更できます。

のような何か:

int length = strlen(messageBefore); 
int numericLength = 0; 
while(numericLength < length && 
     messageBefore[numericLength] >= 48 && 
     messageBefore[numericLength] <= 57) 
{ 
    numericLength++; 
} 

その後lengthの代わりに、前のロジックでnumericLengthを使用して、数字の最初の束を取得します。

希望すると便利です。

0

それとも、これを使用することもできます。最大は8です

#include <climits> 
cin.ignore(numeric_limits<streamsize>::max(), '\n'); 

場合、それはそこに停止します。しかし、あなたはその

const int SIZE = 9; 
char * word = holder.c_str(); 

はこれが動作するかどうか私に教えて書き込むことで、私はあなたができると信じている

const char * word = holder.c_str(); 

8に設定する必要があります。

いずれかの時点でスペースをヒットした場合は、そのスペースまでしか読み上げません。

関連する問題