2016-12-13 25 views
0

文字列の最初のN番目の文字を削除して最後に追加するにはどうすればよいですか?例えば、我々は文字列を削除して文字列の末尾に追加する(C++)

abracadabra 

持って、我々は最後まで最初の4つの文字をシフトするならば、我々は

cadabraabra 
+0

これまでに何をしていますか? – CroCo

+0

'std :: string'クラスには、あなたが必要とするすべてのものが必要です。あなたは何を試しましたか、何がうまくいかないのですか? –

+0

'std :: rotate'について読んでください。 –

答えて

0
string str = "abracadabra" //lets say 
int n; 
cin>>n; 
string temp; 
str.cpy(temp,0,n-1); 
str.earse(str.begin(),str.begin()+n-1); 
str+=temp; 

リファレンス

string::erase
string::copy

5

代わりに取得する必要がありますそれらから耳を傾ける高価な正面には別の方法があります。私たちはrotateを1回のO(N)操作で配置することができます。この場合、あなたはとても私たちがNが4であるならば、あなたはあなたが

cadabraabra 

Live Example

+0

これは、手動でコンソールに文字列を入力すると機能しません。私はあなたのプログラムのようなハードコード(プログラムのように)私のプログラムでそれが回転するが、私はそれを入力するユーザーから期待する場合、コンソールで何も起こっていない。 –

+1

@KristianKamenovあなたが使っているコードを私に見せなければならないでしょう。それはうまくいくはずです。問題になるかもしれない1つのことは、Nが文字列サイズより大きく、無効な回転を持つ場合です。 – NathanOliver

+1

@KristianKamenov [入力とここに働く](http://ideone.com/2KQZ3N) – PaulMcKenzie

0
#include <iostream> 
#include <cstring> 
using namespace std; 

int main() 
{ 
    string str; 
    cin >> str; 
    int number; 
    cin >> number; 

    string erasedString = str; 
    string remainingString = str.substr(number + 1, strlen(str)); 

    erasedString.erase(0, number); 

    return 0; 
} 
+1

'strlen'は' std :: string'に??? –

1

を取得し、上記の例では

std::string text = "abracadabra"; 
std::rotate(text.begin(), text.begin() + N, text.end()); 

を使用することになり、左に回転したいです一度に1つの文字を昔ながらのダブルループで試すことができます。

#include "string.h" 
#include "stdio.h" 

int main() { 
    char ex_string[] = "abracadabra"; 
    int pos = 4; 
    char a; 
    int i, j; 

    size_t length = strlen(ex_string); 
    for (j = 0; j < pos; j++) { 
     a = ex_string[0]; 
     for (i = 0; i < length - 1; i++) { 
      ex_string[i] = ex_string[i + 1]; 
     } 
     ex_string[length-1]=a; 

    } 
    printf("%s", ex_string); 


} 
+0

'N 'が100で、文字列の長さが101文字の場合、10,000回ループします。換言すれば、非常に非効率的である。 – PaulMcKenzie

関連する問題