gpt4 book ai didi

c - 反转字符串中单词的顺序

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

很抱歉提出这样一个平庸的问题,但我遇到了一个看似很小的问题,但就是无法克服它。对于我的任务,我必须从一个文件中取出一行字符串,然后将其反向放入另一个文件中,例如:

one two three
four five six

会是

three two one
six five four

我的问题是,我得到了

 three two one
si five four

所以基本上缺陷是每行的开头有一个空格字符,最后一个单词的最后一个字母总是丢失。这是我的反向函数:

void reverse(char input[], int length, char output[]) {
char space = 32;
input[length - 1] = space;
int value = 0;
int i, k = 0, j;
for (i = 0; i <= length; i++) {
if (input[i] == space) {
for (j = i - 1; j >= k; j--, value++) {
output[value] = input[j];
}
if (j == -1) {
output[value] = space;
value++;
}
k = i;
}
}

char c = 0;
for (int i = 0, j = length - 1; i <= j; i++, j--) {
c = output[i];
output[i] = output[j];
output[j] = c;
}
}

我所做的是首先按字符反转每个单词,然后是整行。如果有人可以帮助我找到我遗漏的最后一点,我将不胜感激。

最佳答案

缺陷来自您的方法:

  • 为什么在偏移量 length - 1 处强制留一个空格?如果您阅读带有 fgets() 的行,行尾可能有一个换行符 ('\n'),但它可能在末尾丢失输入,这将解释 x 在最后一行被覆盖。
  • 你不应该修改输入缓冲区。

这是一个简化版本,以及一个简单的 main 函数:

#include <stdio.h>
#include <string.h>

void reverse(const char *input, int length, char *output) {
int i, j, k, v;
for (i = k = v = 0;; i++) {
if (i == length || input[i] == ' ') {
for (j = i; j-- > k; v++) {
output[v] = input[j];
}
for (; i < length && input[i] == ' '; i++) {
output[v++] = ' ';
}
if (i == length) {
output[v] = '\0';
break;
}
k = i;
}
}
for (i = 0, j = length - 1; i < j; i++, j--) {
char c = output[i];
output[i] = output[j];
output[j] = c;
}
}

int main() {
char input[256];
char output[256];

while (fgets(input, sizeof input, stdin)) {
reverse(input, strcspn(input, "\n"), output);
puts(output);
}
return 0;
}

输出:

three two one
six five four

这是一个更简单的反向函数,一次运行:

#include <string.h>

void reverse(const char *input, int length, char *output) {
int i, j, k, v;
for (i = k = 0, v = length;; i++) {
if (i == length || input[i] == ' ') {
for (j = i; j-- > k;) {
output[--v] = input[j];
for (; i < length && input[i] == ' '; i++) {
output[--v] = ' ';
}
if (v == 0) {
output[length] = '\0';
break;
}
k = i;
}
}
}

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

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