我正在尝试修改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;
}
答案 0 :(得分:2)
我不知道是否还有其他问题,但首先要突出的是:
while (curr)
由于我在代码中的任何地方都没有看到NULL
或nullptr
的任何分配,因此我看不出这可能是正确的。所以我假设您可能要检查空字符,而不是空指针。
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++;
}
}
}