基本上这个程序应该从用户那里获取输入并反转句子中的每个单词。所以,如果我曾经" Hello World"应该打印" olleH dlroW",但截至目前它打印" dlroW olleH"。所以我的程序会颠倒整个句子,而不仅仅是特定的单词。不确定如何处理它。我尽了最大努力。
#include <stdio.h>
#include <string.h>
void reverse(char *str, int start, int end)
{
char temp;
while (start < end)
{
if(isspace(str[start]))
{
printf("%s ", str);
start++;
}
else
{
temp = str[start];
str[start] = str[end];
str[end] = temp;
start++;
end--;
}
}
return;
}
int main()
{
char word[256];
int i=0, bound;
printf("Enter a string\n");
fgets(word, 256, stdin);
printf("%s", word);
bound = strlen(word);
reverse(word, i, bound-1);
printf("%s\n", word);
}
答案 0 :(得分:3)
跟踪您开始和找到空间的点 - 两个整数。如果你发现一个空格从'start'(第一个字母)到'end'(空格)获得一个子字符串。反转子串并将其放回原始字符串并继续。
答案 1 :(得分:3)
像这样修复
#include <stdio.h>
#include <string.h>
void reverse(char *str, int start, int end){
char temp;
while (start < end){
temp = str[start];
str[start++] = str[end];
str[end--] = temp;
}
}
int main(void){
char word[256];
printf("Enter a string\n");
fgets(word, 256, stdin);
printf("%s", word);
size_t pos = 0, start, end;
do {
start = (pos += strspn(word + pos, " \t"));
end = start + strcspn(word + pos, " \t\n");
reverse(word, start, end-1);
pos = end;
}while(start != end);
printf("%s\n", word);
}
答案 2 :(得分:2)
只需将您的反向方法改为此即可。我希望这会有所帮助。
Invalid format specified <versionLabel> tag
测试结果
&#34; Hello World working&#34;反向---&gt;&gt; olleH dlroW gnikrow