簡體   English   中英

使用for循環反轉C中的字符串?

[英]Reversing a string in C using a for loop?

我一直在嘗試盡可能簡單地反轉字符串,試圖向自己證明一點,但由於某種原因代碼無法正常工作。 我知道我可以很容易地在網上找到不同的方法,但我不會學到任何東西。 所以有人能解釋一下嗎?

#include <stdio.h>
#include <stdlib.h>

int main()
{   int i,n,c=0;
    char s[50];
    char a[50];
    for(i = 0; i < 50;i++)
        scanf("%[^\n]c",&s[i]);
    for(n = strlen(s), i = 0; n > i; n--,c++)
        s[c] = s[n-1];

    printf("%s", s);
    return 0;
}

對於初學者,您需要包含標題<string.h>

這個循環

for(i = 0; i < 50;i++)
    scanf("%[^\n]c",&s[i]);

沒有多大意義。 此外,您需要在輸入的字符串后附加終止零字符'\\0'

例如,您需要輸入一次字符串

scanf("%49s", s );

或者甚至更好地寫

scanf( "%49[^\n]", s );

在數組中輸入一個包含多個單詞的字符串。

這個 for 循環

for(n = strlen(s), i = 0; n > i; n--,c++)
    s[c] = s[n-1];

也沒有任何意義。 它不會反轉字符串。 變量 i 沒有增加。 那就是你需要交換兩個字符。

您還需要在使用它們的最小范圍內聲明變量。

循環可以通過以下方式查找示例

for ( size_t i = 0, n = strlen(s); i < n / 2; i++ )
{
    char c = s[i];
    s[i] = s[n-1-i];
    s[n-1-i] = c;
}

除此之外,程序中不使用聲明的數組a

所以程序可以如下所示

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

int main( void )
{
    char s[50] = "";
 
    scanf( "%49[^\n]", s );

    for ( size_t i = 0, n = strlen(s); i < n / 2; i++ )
    {
        char c = s[i];
        s[i] = s[n-1-i];
        s[n-1-i] = c;
    }

    puts( s );
}

如果輸入字符串

Hello, unikatura!

那么程序輸出將是

!arutakinu ,olleH
  1. 使用函數。

兩種變體:

char *reverse(char *str)
{
    char *end = str, *start = str;

    if(str && *str)
    {
        for(;*(end + 1);end++);
        for(;end > start;)
        {
            char tmp = *end;
            *end-- = *start;
            *start++ = tmp;
        }
    }
    return str;
}


char *reverse1(char *dest, const char *str)
{
    char *wrk = dest;
    size_t len = 0;

    if(str)
    {
        for(;*str;len++, str++);str -= !!*str;
        for(;len--; *wrk++ = *str--);
    }
    *wrk = 0;
    return dest;
}

暫無
暫無

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

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