jkm*_*jkm 6 c c-strings character-arrays
我试图写一个函数,将一个数组中删除所有字符,除了'+','-','*','/',和数字.这是我提出的代码:
void eliminateJunk(char string[MAX]){
int i,j;
char stringOut[MAX];
int length = strlen(string) - 1;
for(i=0; i <= length; i++){
if(string[i] != '+'
&& string[i] != '-'
&& string[i] != '*'
&& string[i] != '/'
&& !(isdigit(string[i]))){
for(j=i; j < length; j++){
string[j] = string[j+1];
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,该函数并不总是从c字符串中删除所有垃圾字符 - 它会获得大部分垃圾字符,但偶尔会留下一些.
输入示例:
123 123
Run Code Online (Sandbox Code Playgroud)
数组的示例输出,在修改后:
123123
Run Code Online (Sandbox Code Playgroud)
但是,在某些输入中,它会留下空间......
输入示例:
123 123
Run Code Online (Sandbox Code Playgroud)
示例输出:
123 123
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能解决这个问题?我觉得解决方案就在我的鼻子底下,但我似乎无法找到它.
das*_*ght 10
这是移除时的经典问题:在for循环之后需要递减i,否则跳过下一个字符.
然而,嵌套for循环是不必要的:你可以通过保持独立做一个单循环整个事情read和write指标.当您看到有效字符时,将其从读取位置移动到写入位置,并递增两个索引.当您看到无效字符时,请在不移动字符的情况下递增读取索引.在循环结束时终止字符串 - 你完成了!
int r, w; // r for "read", w for "write"
for(r=0, w=0; r != length ; r++) {
// Your condition is inverted
if(string[r] == '+'
|| string[r] == '-'
|| string[r] == '*'
|| string[r] == '/'
|| (isdigit(string[r]))) {
// No loop inside
string[w++] = string[r];
}
}
// Add null terminator at the end
string[w] = '\0';
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
952 次 |
| 最近记录: |