2013-03-22 190 views
0

我想修改一个字符数组(“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; 
} 

回答

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

我不知道是否有其他的问题,但脱颖而出的第一件事情是这样的:

while (curr) 

由于我在代码的任何地方都看不到NULLnullptr的任何赋值,我不明白这怎么可能是正确的。所以我假设你可能打算检查一个空字符而不是空指针。

while (*curr) 
+0

谢谢!我有点粗心。你能建议其他有效的方法吗? – Shankar 2013-03-22 05:46:20

+0

@ArunprasathShankar:见Alf的答案。或者luksy的。 – 2013-03-22 05:47:41

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++; 
       } 
     } 
}