追逐指针方法失败

时间:2013-03-22 05:35:46

标签: c++ arrays pointers memory-management

我正在尝试修改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;
}

3 个答案:

答案 0 :(得分:2)

我不知道是否还有其他问题,但首先要突出的是:

while (curr)

由于我在代码中的任何地方都没有看到NULLnullptr的任何分配,因此我看不出这可能是正确的。所以我假设您可能要检查空字符,而不是空指针。

while (*curr) 

答案 1 :(得分:2)

string s = "1,204,342,544";
s.erase( remove( s.begin(), s.end(), ',' ), s.end() );

答案 2 :(得分: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++;
                }
        }
}