如何在字符串中的大写字母前添加空格?
我正在为学校编写一个c代码,该代码需要一个函数,在一个连续的句子中在每个大写字母前添加一个空格
e.g。 " HelloHowAreYou" 应该是这样的 您好,你好吗
这就是我所尝试过的,就我而言
int i;
i = 1;
while (str[i] != '\0')
{
if (str[i] >= 'A' && str[i] <= 'Z')
i = i + 1;
}
任何人都可以帮忙吗?
答案 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);
答案 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
这具有动态分配返回缓冲区的优点,而不是依赖于固定长度的字符串。