gpt4 book ai didi

c - 如何反转字符串中的每个单词?

转载 作者:行者123 更新时间:2023-11-30 16:09:16 24 4
gpt4 key购买 nike

我被迫不使用 <string.h> 中的任何内容.

我想反转传递的字符串中的每个单词。

这是我到目前为止所拥有的:

#include <stdio.h>

char * reversepPrint( char *name )
{
char *normal = name, *reverse = name;

while ( *reverse ) ++reverse;

if ( normal < reverse )
{
for ( ; normal < --reverse; ++normal )
{
char c = *normal;
*normal = *reverse;
*reverse = c;
}
}

return name;
}

int main( void )
{
char s[] = "Simon liebt Pizza!";

printf("%s", reversepPrint(s));

return 0;
}

我的代码正在反转整个字符串,但我希望反转单个单词 - 因此此示例的结果将是 "nomiS tbeil !azziP" .

最佳答案

我们需要分解为两个问题。我们已经有了一个问题的大部分解决方案(反转字符串);我们只需要让它与子字符串一起工作。我们主要通过删除查找字符串结尾的代码来实现此目的:

/* reverse substring [left, right) in-place */
void reverseSubstring(char *left, char *right)
{
while (left < --right) {
char c = *right;
*right = *left;
*left++ = c;
}
}

问题的另一半是找到单词之间的边界。我们可以使用isspace()将开始和结束指针放置在正确的位置,然后调用我们的 reverseSubstring和他们在一起:

#include <ctype.h>
char *reversepPrint(char *const name)
{
char *start = name;
char *end;

while (*start) {
while (*start && isspace(*start)) {
++start;
}
end = start;
while (*end && !isspace(*end)) {
++end;
}
reverseSubstring(start, end);
start = end;
}

return name;
}

如果您也被禁止使用<ctype.h> ,写一个简单的isspace()并不难。您自己的此功能。

<小时/>

完整程序

/* reverse substring [left, right) in-place */
void reverse_substring(char *left, char *right)
{
while (left < --right) {
char c = *right;
*right = *left;
*left++ = c;
}
}

#include <ctype.h>
/* reverse individual words in string */
/* word boundaries determined by isspace() */
char *reverse_words(char *const name)
{
for (char *start = name, *end; *start; start = end) {
while (*start && isspace(*start)) { ++start; }
end = start;
while (*end && !isspace(*end)) { ++end; }
reverse_substring(start, end);
}

return name;
}

#include <stdio.h>
int main(void)
{
char s[] = "Simon liebt Pizza!";
printf("%s", reverse_words(s));
}

关于c - 如何反转字符串中的每个单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59179184/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com