删除额外的空格C++
Remove additional spaces C++
我有一个家庭作业,我应该删除char数组中的所有前导空格。如果数组的开头有空格,也应该将其删除。另外,我必须注意一个空数组。我不能使用<cstring>
和<string.h>
。此外,我无法创建任何其他数组。我在谷歌上搜索了很多,但我不知道如何解决这个问题。这是我迄今为止所拥有的。
void clean(char* tab)
{
//char *p = tab;
for (int i = 0; i <= sizeof(tab); i++)
{
if ((tab[i] = ' ') && (tab[i + 1] = ' '))
{
tab[i] = tab[i + 1];
}
}
}
int main()
{
char tab1[] = " h qa w e ";
cout << tab1 << endl;
clean(tab1);
cout << tab1 << endl;
}
如果有人能给我一个如何解决的建议,我将不胜感激。
将每个空间视为数组中的一个"空闲空间",您应该填充这个空间。
您可以在char数组中维护指向不同位置的两个指针。一个到第一个可用空间,另一个到您检查的当前角色。
你只需要弄清楚这些问题:
- 你将如何填满这些空间
- 你怎么知道你什么时候做完
这里有一些单独的问题。
一个原因是您输入了错误的比较:毫无疑问,if ((tab[i] = ' ') && (tab[i+1] = ' '))
应该是:if ((tab[i] == ' ') && (tab[i+1] == ' '))
。
第二,您使用的是sizeof(a pointer)
,这是您真正想要的strlen(a pointer)
(或者至少是类似的东西,扫描一个NUL字符来表示字符串的末尾)。
第三,循环实现的算法似乎没有很好地反映出删除前导空格的意图(如果有的话)。我会扫描第一个不是空格的东西,然后复制字符串的剩余部分,使其从字符串的开头开始。
[对不起,我不会发布实际的代码或比家庭作业更详细的信息。]
这些代码完全不依赖于nor,也不分配任何临时缓冲区。请注意,必须定义自制的copy
函数,以便在删除空间时复制字符串内容。
请注意,此代码易于理解,但如果需要性能,则可能/应该进行优化以最大限度地减少副本。
因为还不清楚你到底想要什么。。。
此操作将删除字符串中的所有空格。
#include <iostream>
void copy( char* to, char* from )
{
int i = 0;
while ( true ) // risky in case char* has no EOS character!
{
to[i] = from[i];
if ( from[i] != ' ' )
++i;
else
break;
}
}
void clean( char* tab )
{
int i = 0;
while ( tab[i] != ' ' )
{
if ( tab[i] == ' ')
{
copy( tab + i, tab + i + 1 );
// do not increment i, to test tab[i] that was newly copied from tab[i+1]
}
else
{
++i;
}
}
}
int main() {
char tab1[] = " h qa w e ";
std::cout << tab1 << std::endl;
clean(tab1);
std::cout << tab1 << std::endl;
}
https://ideone.com/Yv4aqL
如果您只想删除前导空格,则更容易,只需更改clean
函数即可:
void clean( char* tab )
{
int i = 0;
while ( tab[i] == ' ' )
{
copy( tab + i, tab + i + 1 );
}
}
https://ideone.com/RIAsGt
- 2D数组来自文本输入,中间有空格
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- 如何在C++中读取空格分隔的输入 当我们不知道输入的数量时
- 如何在c++中使用system()来运行包含空格的python脚本
- basic_string的前导/尾部不区分空格的特征
- 移除前面有空格的前2个字符串
- 如何将以逗号和空格分隔的整数读取到 2D 数组中?
- 如何在 C++ 中从文件中读取字符数组(带有一些空格)
- 如何逐行读取文件,每行中的内容都用空格分隔并将其写入新文件中
- 为什么 c++(g++) 不允许模板返回类型和函数名称之间有空格?
- 用于存储由空格分隔的字符串的 C++/C 数据结构
- 在字符串中插入空格
- C ++中的StringStream有助于使用向量从字符串中提取逗号分隔的整数,而不是空格分隔的整数,为什么?
- C++为一串单词添加空格
- 使用另一个字符串从字符串中删除空格
- 我还可以添加什么来按空格或空格正确拆分C++字符串?
- 如何打印不带空格的输入整数?
- 野牛/yacc 解析器在不被空格分隔时跳过 grammer - "unexpected $end"
- C++ "noskipws"没有按预期工作,如何正确允许字符串中的空格?
- 在 c++ 中逐行阅读字符串,不要以空格停止