gpt4 book ai didi

c - 在 C 中反转字符串中的单词

转载 作者:太空宇宙 更新时间:2023-11-04 07:17:44 25 4
gpt4 key购买 nike

所以基本上在这个练习中我应该反转给定字符串中的每个单词。一个单词被认为包含字母数字字符,任何非字母数字字符都将结束该单词。例如“这是一个示例字符串,无论如何。”并反过来“sihT si na elpmaxe gnirts, revetahw.”。

我真的很难找出我编写的代码有什么问题。代码似乎可以正常工作,但是当我将它发送到测试服务器时,它给我一个 Valgrind 错误。

这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
void reversed_words(char *str)
{
char word[100];
char *temp;
char *zet;
temp=str;
int k=0;
while(*temp) //processing complete string
{
if(isalnum(*temp))
{
while(isalnum(*temp)) //extracting word from string
{
word[k]=*temp;
k++;
temp++;
}
word[k]='\0';
k=0;
strrev(word); // Reverses the string
zet=word;
while (*zet) // Copying the reversed word into original string
{
*str = *zet;
zet++;
str++;
}
while (!isalnum(*str)) // Skipping all non-alphanumeric character(s)
{
str++;
}
}
temp++;
}
}

所以我收到了这些类型的错误消息:“使用大小为 8 的未初始化值”和“未初始化值是由堆栈分配创建的”。我不知道错误来自哪里,我希望有人能帮助我解决这个问题。提前致谢。

最佳答案

这里是对函数的更改,对原始代码中的错误进行了最小的更改。具体做了两处更改:1) 将最后一个 while 循环替换为 while 底部对 str 的简单赋值(从之前的帖子修改而来)。正确的答案已经计算出来,并且这个赋值将字符串向前移动,而没有另一个 while 循环出现掉尾问题。 2) 在 temp++ 周围放置一个 else,因为当找到一个单词时不应该这样做,否则您可以结束。

void reversed_words(char *str)
{
char word[100];
char *temp;
char *zet;
temp=str;
int k=0;
while(*temp) //processing complete string
{
if(isalnum(*temp))
{
while(isalnum(*temp)) //extracting word from string
{
word[k]=*temp;
k++;
temp++;
}
word[k]='\0';
k=0;
strrev(word); // Reverses the string
zet=word;
while (*zet) // Copying the reversed word into original string
{
*str = *zet;
zet++;
str++;
}
}
else
{
temp++;
}
str = temp;
}
}

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

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