0

最も効率的な方法ですべてのコンマを削除するために、char配列( "1,204,342,544")を変更しようとしています。私はこの問題に追跡ポインターアプローチを使用しています。ソリューションをC++で実装しましたが、コードが失敗するようです。間違いを見つけて修正するのに助けが必要です。また、同じソリューションを実装するためのより良い(より効率的な方法)かどうかを提案してください。

Pythonでは本当に簡単だと思います!。

arr = "1,234,34,54"
print arr.replace(',','')

追跡ポインタを使用するC++の場合(効率的な方法)

#include <iostream>
using namespace std;


char* removeCommas(char* arr) {
    char *curr = arr; // pointer to current position
    char *tail = arr; // tail pointer

    while (curr) {
        if (*curr != ',') {
            if (curr != tail) {
                *tail = *curr;
            }
            curr ++;
            tail ++;
        }
        else {
            curr ++;
        }
    }
    *tail = '\0';
    return arr;
}

int main() {
    char arr[] = "1,204,342,544";    
    removeCommas(arr);
    return 0;
}
4

3 に答える 3

2

他に問題があるかどうかはわかりませんが、最初に目立つのはこれです。

while (curr)

コードへの割り当てNULLnullptrコード内のどこにも割り当てが表示されないため、それがどのように正しくなるかわかりません。したがって、おそらくnullポインタではなく、null文字をチェックするつもりだったと思います。

while (*curr) 
于 2013-03-22T05:42:08.997 に答える
2
string s = "1,204,342,544";
s.erase( remove( s.begin(), s.end(), ',' ), s.end() );
于 2013-03-22T05:46:05.803 に答える
0
char* removeCommas(char* arr) {
        char *curr = arr; // pointer to current position
        char *tail = arr; // tail pointer

        while(1){
                switch(*tail=*curr++){
                        case '\0':
                                return arr;
                        case  ',':
                                continue;
                        default:
                                tail++;
                }
        }
}
于 2013-09-01T15:52:47.823 に答える