我一直在嘗試盡可能簡單地反轉字串,試圖向自己證明一點,但由于某種原因代碼無法正常作業。我知道我可以很容易地在網上找到不同的方法,但我不會學到任何東西。所以有人能解釋一下嗎?
#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;
}
uj5u.com熱心網友回復:
對于初學者,您需要包含 header <string.h>。
這個回圈
for(i = 0; i < 50;i )
scanf("%[^\n]c",&s[i]);
沒有多大意義。此外,您需要在輸入的字串后附加終止零字符'\0'。
例如,您需要輸入一次字串
scanf("Is", s );
或者甚至更好地寫
scanf( "I[^\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( "I[^\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
uj5u.com熱心網友回復:
- 使用函式。
兩種變體:
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;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/356323.html
