[英]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
兩種變體:
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.