我希望您能提供一个函数,用于在字符串中减少多个空格字符' '
。
例如,对于给定的字符串s
:
s="hello__________world____!"
该函数必须返回
"hello_world_!"
。
在Python中,我们可以简单地通过正则表达式来实现:re.sub("\s+", " ", s);
如果需要保留原始字符串,请在副本上运行修改字符串的版本:
void compress_spaces(char *str)
{
char *dst = str;
for (; *str; ++str) {
*dst++ = *str;
if (isspace(*str)) {
do ++str;
while (isspace(*str));
--str;
}
}
*dst = 0;
}
++str
呢?在这种情况下它和str++
一样吗? - srchulo在C标准库中没有这样的函数。必须编写一个函数来完成此操作或使用第三方库。
下面的函数应该可以解决问题。将源字符串用作目标指针以执行原地操作。否则,请确保目标缓冲区具有足够的大小。
void
simplifyWhitespace(char * dst, const char * src)
{
for (; *src; ++dst, ++src) {
*dst = *src;
if (isspace(*src))
while (isspace(*(src + 1)))
++src;
}
*dst = '\0';
}
void remove_more_than_one_space(char *dest, char *src)
{
int i, y;
assert(dest && src);
for(i=0, y=0; src[i] != '\0'; i++, y++) {
if(src[i] == ' ' && src[i+1] == ' ') {
/* let's skip this copy and reduce the y index*/
y--;
continue;
}
/* copy normally */
dest[y] = src[i];
}
dest[y] = '\0';
}
int main()
{
char src[] = "Hello World ! !! !";
char dest[strlen(src) + 1];
remove_more_than_one_space(dest, src);
printf("%s\n", dest);
}
我刚刚制作了这个,希望能有所帮助。
strlen(src)
,那么你的代码为什么会写成char dest[strlen(src) + 1];
呢?;) - Sean#include<stdio.h>
#include<string.h>
#include<ctype.h>
int main()
{
char word[100];
gets(word);
//the word has more than a single space in between the words
int i=0,l,j;
l=strlen(word);
for (i=0;i<l;i++)
{
if(word[i]==' '&&word[i+1]==' ')
{
for(j=i+1;j<l;j++)
word[j]=word[j+1];
}
}
puts(word);
return 0;
}
我正在学习C语言,所以我使用更基础的代码。我正在阅读《C程序设计语言》的第一章,并尝试找到其中一个任务的答案。
这是我想出来的:
#include <stdio.h>
int main()
{
/* Set two integers:
c is the character being assessed,
lastspace is 1 if the lastcharacter was a space*/
int c, lastspace;
lastspace = 0;
/* This while loop will exit if the character is EOF
The first "If block" is true if the character is not a space,
and just prints the character
It also tells us that the lastcharacter was not a space
The else block will run if the character is a space
Then the second IF block will run if the last character
was not also a space (and will print just one space) */
while((c = getchar()) != EOF){
if (c != ' '){
putchar(c);
lastspace = 0;
}
else {
if (lastspace != 1)
putchar(c);
lastspace = 1;
}
}
return 0;
}
另一种做法是仅打印第一个空格出现直到下一个字符出现,这里是我的暴力解决方案。
#include<stdio.h>
typedef int bool;
#define True 1
#define False 0
int main()
{
int t;
bool flag = False;
while ((t = getchar()) != EOF)
if (t == ' ' && !flag)
{
putchar(' ');
flag = True; // flag is true for the first occurence of space
}
else if(t == ' '&& flag)
continue;
else
{
putchar(t);
flag = False;
}
return 0;
}
希望能有所帮助。