c++ - 循环从字符数组中删除过多的空格(C++)
问题描述
我正在尝试创建一个简单的循环来读取字符数组并打印回数组而没有任何过多的空白。
我的循环有问题,希望能得到一些帮助。
for(int i=0;i<ARR_SIZE;++i) //Initialize loop
{
if(isspace(arr[i])&&isspace(arr[i+1]) //If check for double whitespace
{arr[i+1] = arr[i+2];} //If detected, move the character after the whitespace (+2) to (+1)
}
这确实删除了双空格,但我在复制所有其他字符时遇到了逻辑问题。
即当前,如果我输入“t_est”,我会得到“t_eest”。
这是一个相当简单的问题,但我想我要么想太多,要么错过了一些简单的逻辑步骤。
任何意见,将不胜感激。
解决方案
简而言之,您不仅应该移动下一个字符来替换重复的空格,还应该在之后移动所有字符。
最简单的方法当然是定义另一个数组,如另一个答案中所述。
但是,由于您只是删除字符,因此可以轻松地就地完成:
只需保留两个指针,一个用于读取字符,一个用于写入位置。“读取”指针将从字符串开始迭代到结束
在伪代码中,并假设您正在处理 C 样式字符串(即以空字符结尾的字符数组):
char* src = inputString;
char* dest = src;
while src != NULL {
if *src is not space OR previous char is not space {
write to dest pos, and increment dest
}
increment src
}
*dest = NULL; // null-terminating at new position
以较短的形式(我尽量不牺牲可读性太多):
char* src = dest = inputString;
for ( ; *src; ++src) {
if (src == inputString || ! isspace(*src) || *src != *(src-1)) {
*(dest++) = *src;
}
}
*dest = '\0';
推荐阅读
- google-analytics - 如何使用 Google 分析跟踪我网站上的 AdSense 搜索链接
- java - Android :: java.lang.NullPointerException:尝试在空对象上调用虚拟方法“void android.widget.ProgressBar.setVisibility(int)”
- javascript - 反应原生导航到其他屏幕
- firebase - Firebase 功能和存储已停止工作
- c# - 保存位图时出现访问冲突异常
- xml - 在 XSD 中重新定义标准命名空间是否正确?
- c# - 转义 HTML 电子邮件正文中的尖括号
- javascript - 更新嵌套状态数组反应
- selenium - 如何设置我的网络爬虫以间隔运行,我在哪里托管它?
- html - 使用 Azure Api 管理服务在 HTML 页面中隐藏视频 URL