我正在尝试编写一个函数来删除数组中的所有字符,除了”,’ – ‘,’*’,’/’和数字.这是我提出的代码:
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]; } } } }
但是,该函数并不总是从c字符串中删除所有垃圾字符 – 它会获得大部分垃圾字符,但偶尔会留下一些.
输入示例:
123 123
123123
但是,在某些输入中,它会留下空间……
输入示例:
123 123
示例输出:
123 123
解决方法
这是你去的经典问题:在for循环之后你需要递减i,否则你跳过下一个字符.
但是,嵌套的for循环是不必要的:您可以通过维护单独的读写索引来完成整个事务.当您看到有效字符时,将其从读取位置移动到写入位置,并递增两个索引.当您看到无效字符时,请在不移动字符的情况下递增读取索引.在循环结束时终止字符串 – 你完成了!
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';
原文地址:https://www.jb51.cc/c/116968.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。