2016-08-29 8 views
-1

内の文字列[EDITED] iは逆の順序で与えられた文字列を分割する関数を記述し、文字列配列に格納し、何かのようにしたい:スプリット逆順C++

string* splitStr(string s, char c,int& ssize) { 
    int size = s.size(); 
    string* ss = new string[size]; 

    int count = 0; 
    ssize = 0; 

    for (int j = 0; j < size; j++) { 
     if (s.at(j) == c) { 
      count++; 
     } 
    } 

    ssize = ++count; 
    for (int i = 0; i<size; i++) { 
     if (s.at(i) == c) { ssize--; continue; } 
     else { ss[ssize] += s.at(i); } 
    } 
    ssize = count; 
    return ss; 
} 

サンプルプログラム:

string s = "this is some damn"; 
    int size = 0; 
    string* ss = splitStr(s, ' ', size); 
    for (int i = 0; i < size; i++) { 
     cout << ss[i] << "\n"; 
    } 
    system("PAUSE"); 

出力:

(this is empty line) 
damn 
some 
is 

これは単なる大雑把な試みですが、一般的には非常に信頼性の低いアプローチですね。可能な限り最善の解決策になる可能性があるのは、string、char、int、float以外のデータ型を使用しないこのケースです。

+0

未定義の動作を逆に。ローカルバッファへのポインタを返すことはできません。 – StoryTeller

+2

サンプル入力と希望する出力を提供できますか? –

+0

ブーストスプリットとhttp://en.cppreference.com/w/cpp/container/vector/rbeginをご覧ください – Roby

答えて

-2
#include <stdio.h> 

void strrev(char *p) 
{ 
char *q = p; 
while (q && *q) ++q; 
for (--q; p < q; ++p, --q) 
    *p = *p^*q, 
    *q = *p^*q, 
    *p = *p^*q; 
} 

int main(int argc, char **argv) 
{ 
    do { 
     printf("%s ", argv[argc - 1]); 
     strrev(argv[argc - 1]); 
     printf("%s\n", argv[argc - 1]); 
    } while (--argc); 

return 0; 
} 

これはXORスワップのものです。 a^a==0のように自己とスワップすることを避けなければならないことに注意してください。

+0

このコードはコンパイルされません。 –

+2

xorスワップを使用しないでください。すべてを読みにくくするだけです。 b)より遅い –

0

ソリューションは、ブーストhttp://www.boost.org/doc/libs/1_61_0/doc/html/string_algo/usage.html#idp398633360をベースとし、すべての周りのイテレータhttp://en.cppreference.com/w/cpp/container/vector

#include <iostream> 
#include<boost/algorithm/string.hpp> 
#include <vector> 

int main() 
{ 
    std::string const str{"bla=blub"}; 
    std::vector<std::string> elems; 

    boost::split(elems, str, boost::is_any_of("=")); 

    for(auto const& elem : elems) 
     std::cout << elem << "\n"; 

    for(auto it=elems.rbegin(); it!=elems.rend(); ++it) 
     std::cout << *it << "\n"; 

    return 0; 
} 
0

読むカーニハンとリッチー

#include <string.h> 

void reverse(char s[]) 

{ 

int length = strlen(s) ; 
int c, i, j; 

    for (i = 0, j = length - 1; i < j; i++, j--) 
    { 
    c = s[i]; 
    s[i] = s[j]; 
    s[j] = c; 
    } 
}