在首都前加一个空格?

时间:2015-03-21 18:19:20

标签: c

如何在字符串中的大写字母前添加空格?

我正在为学校编写一个c代码,该代码需要一个函数,在一个连续的句子中在每个大写字母前添加一个空格

e.g。 " HelloHowAreYou" 应该是这样的 您好,你好吗

这就是我所尝试过的,就我而言

int i;

i = 1;

  while (str[i] != '\0')

 {

   if (str[i] >= 'A' && str[i] <= 'Z')

   i = i + 1;
 }

任何人都可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

要了解为什么这不起作用,请尝试用铅笔在一张纸上运行代码。当您看到大写字母时,您所做的只是跳过索引。此外,你永远不会做任何复制(你需要复制,因为首都之后的字母需要移动)。

要弄清楚要做什么,可以考虑从后面进行移动:从最后走下索引,在之后插入一个空格

你遇到的每个大写字母。

这只有一个皱纹 - 知道更新的字符串结束的位置。但是,如果您将大写字母数添加到字符串的长度,那么这很容易计算。

当然,您需要确保更新的字符串适合旧字符串的空格。

char str[100];
scanf("%50s", str);
int len = strlen(str);
if (len == 0) return; // Stop if the string is empty.
for (int i = 1 ; str[i] != '\0' ; i++) {
    if (str[i] >= 'A' && str[i] <= 'Z')
        len++;
}
int pos = strlen(str);
while (pos > 0) {
    str[len] = str[pos--];
    if (str[len] >= 'A' && str[len] <= 'Z') {
        str[--len] = ' ';
    }
    len--;
}
printf("%s\n", str);

Demo.

答案 1 :(得分:0)

怎么样

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

char *
addspaces (const char *src)
{
  /* first find the length of the required string */
  int l = 1;                    /* to allow for terminating NUL */
  const char *s;
  char *dest;
  char *d;

  for (s = src; *s; s++, l++)
    if (isupper (*s))
      l++;

  /* now allocate memory for the string */
  dest = malloc (l);
  if (!dest)
    return NULL;

  /* now copy the original string into the buffer */
  for (s = src, d = dest; *s;)
    {
      if (isupper (*s))
        *d++ = ' ';
      *d++ = *s++;
    }
  *d = 0;
  return dest;
}

int
main (int argc, char **argv)
{
  char *test = "AddSpacesToThisString";
  char *out = addspaces (test);
  printf ("Result: %s\n", out);
  free (out);
  exit (0);
}

您可以在此处看到它:http://ideone.com/eKMIV0

这具有动态分配返回缓冲区的优点,而不是依赖于固定长度的字符串。