簡體   English   中英

反轉字符串中單詞順序的程序,錯誤地打印反轉字符串

[英]Program to reverse order of words in a string printing reversed string incorrectly

我正在嘗試編寫一個程序,該程序接受輸入的字符串並顛倒單詞的順序。 它還計算語句中有多少個單詞。 因此,如果輸入“batman and robin”,它將打印:

robin and batman
words in statement: 3

我的程序大部分都可以工作,但它以一種奇怪的方式打印。 這將是我編寫的程序中“batman and robin”的輸出:

robin

and batman

words in statement: 2

我不知道為什么有一個額外的換行符將第一個單詞與其余單詞分開。 無論我輸入什么,第一個單詞總是與其余單詞分開,計數為一個。 我不確定額外的換行符來自哪里。 我可以通過在打印之前將計數加一來解決計數問題,但我正在嘗試找到更好的解決方案。

我的代碼:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
#include<string.h>

int main(void) {
char ent[50], rev[50];
int length, i = 0, start, end, j = 0, count = 0, k;

printf("Enter a statement: ");
fgets(ent, 50, stdin);
//printf("%s\n", ent);

length = strlen(ent);
start = length - 1;
end = length - 1;


while (start > 0) {
    if (ent[start] == ' ') {
        i = start + 1;
        count++; 

        while (i <= end) {
            rev[j] = ent[i];
            i++;
            j++;
        }
        rev[j++] = ' ';
        end = start - 1;
    }
    start--;
}

for (i = 0; i <= end; i++) {
    rev[j] = ent[i];
    j++;
}

rev[j] = '\0';
//count = count + 1;

printf("Reversed statement: %s\n", rev);
printf("Words in statement: %d\n", count);

return(0);
}

如果函數fgets讀取一個換行符,那么它也會將它寫入字符串。

因此,您將寫給rev的第一個單詞不是"robin" ,而是"robin\\n" 這就是導致您發布的不需要的輸出的原因。

您可以處理換行符,也可以在調用fgets后立即將其刪除。 請參閱此問題,了解刪除換行符的最佳方法是什么:

從 fgets() 輸入中刪除尾隨換行符

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM