如何从c中的日期时间字符串中删除空格

时间:2017-07-26 13:54:16

标签: c string

下面的代码会创建一个包含日期和时间的字符串,例如Wed Jul 26 14:45:28 2017

我怎样才能删除它的空格?那就是WedJul2614:45:28

原始代码:

#include <stdio.h>
#include <time.h>

int main() {
    time_t t = time(NULL);
    struct tm *tm = localtime(&t);
    char s[64];
    strftime(s, sizeof(s), "%c", tm);
    printf("%s\n", s);
}

我尝试了这段代码,但它会打印wed?July

#include <stdio.h>
#include <time.h>

int main() {
    time_t t = time(NULL);
    struct tm *tm = localtime(&t);
    char s[64];
    char temp[64];
    strftime(s, sizeof(s), "%c", tm);
    printf("%s\n", s);


    for (int i = 0; i < sizeof(s); i++) {
      if (s[i] != ' ') {
        temp[i] = s[i];
      }
    }
printf("%s\n", temp);  
}

5 个答案:

答案 0 :(得分:6)

int j = 0;
for (int i = 0; s[i]!='\0'; i++) {
  if (s[i] != ' ') {
    temp[j] = s[i];
    j++;
  }
}

跟踪索引,这样您就不会只留下一些随机值的空格。此外,您应该在temp的末尾添加一个null。

temp[j] = '\0';

答案 1 :(得分:4)

马特的答案有效,但你也可以这样做:

这个例子没有调用系统函数:strlen。在这里,我们不需要它。它有点优化。

i = 0;
int j = 0;
while (s[i] != '\0')
  {
    if (s[i] == ' ')
      {
        temp[j] = s[i];
        j++;
      }
    i++;
  }
temp[j] = '\0';

别忘了&#39; \ 0&#39;在你的字符串的末尾。

答案 2 :(得分:2)

马特已经为你提出的问题提供了答案

您可能想要需要的内容也可以轻松实现。 如果您不想要空格,请避免在第一时间添加空格:

替换"%c"的格式字符串strftime(),它为您的语言环境提供标准格式,其字符串可直接创建您想要的内容:"%a%b%d%T"

答案 3 :(得分:0)

有点贵,但你至少不需要另一个变量,并且每次修改都有一个有效的字符串。

#include <string.h>

...

  size_t l = strlen(s);
  for (size_t i = 0; i < l; ++i) {
    if (s[i] != ' ') {
      memmove(s+i, s+i+1, l-i+1); 
    }
  }

答案 4 :(得分:0)

您可以使用标准库函数将空间挤出到位。鉴于字符串非常短并且只有几个空格,性能不会受到太大影响。

#include <stdio.h>
#include <time.h>
#include <string.h>

int main() {
    time_t t = time(NULL);
    struct tm *tm = localtime(&t);
    char s[64];
    strftime(s, sizeof(s), "%c", tm);
    printf("before: %s\n", s);

    for ( char *p = strchr(s, ' '); p ;  p = strchr(p, ' ') )
        strcpy(p, p+1);

   printf("after: %s\n",s);

}