廈門網(wǎng)站做優(yōu)化今日關(guān)鍵詞
文章目錄
- 1.描述
- 2.解題思路
- 3.具體代碼
1.描述
- 輸入描述:
將一個字符串str的內(nèi)容顛倒過來,并輸出??梢杂锌崭?/p>
數(shù)據(jù)范圍:1≤𝑙𝑒𝑛(𝑠𝑡𝑟)≤10000 1≤len(str)≤10000
- 輸出描述:
輸出逆序的字符串
- 示例圖:
2.解題思路
首先,我們需要一個接收函數(shù)用來接收字符串,這里的字符串應(yīng)該用字符數(shù)組存儲。
逆序輸出,就是將數(shù)組元素倒過來輸出。
我們可以直接通過逆序的數(shù)組下標,輸出逆序字符串。
也可以將數(shù)組下標元素逆序交換,輸出逆序字符串。
3.具體代碼
我找到了兩個方法:
代碼1:
#include <stdio.h>
#include <string.h>
int main()
{int i;char s[10000];gets(s);for(i=strlen(s)-1;i>=0;i--){ putchar(s[i]);}return 0;
}
打印:
代碼講解:
- 定義整型變量i和字符數(shù)組s。
- 通過
gets(s)
來接收輸入的語句,直到遇到換行符。 - 通過一個for循環(huán)來逆序打印輸入的語句。
代碼2:
這個代碼看起來復(fù)雜點。
void Reverse(char* str)
{char* left = str;// 定義左指針left,初始指向字符串的起始位置char* right = str + strlen(str)-1;// 定義右指針right,初始指向字符串的最后一個字符位置while(left < right)// 當左指針小于右指針時,執(zhí)行循環(huán)體{char temp = *left;// 臨時保存左指針指向的字符*left = *right; // 將右指針指向的字符賦值給左指針指向的位置*right = temp; // 將臨時保存的左指針字符賦值給右指針指向的位++left;// 左指針向后移動一位--right;// 右指針向前移動一位}
}int main()
{char str[10000] = {0};while(gets(str)){Reverse(str);printf("%s\n", str);memset(str, 0, sizeof(str)/sizeof(str[0]));}return 0;
}
打印:
代碼講解:
-
進入main函數(shù),先定義一個字符數(shù)組str。
-
進入while循環(huán),通過
gets(str)
讀取用戶輸入,直到遇到換行符。 -
將字符數(shù)組arr首元素地址傳遞給
Reverse()
函數(shù)。 -
進入
Reverse()
函數(shù),定義左指針left,初始指向字符串的起始位置 -
定義右指針right,初始指向字符串的最后一個字符位置
-
進入while循環(huán),當左指針小于右指針時,執(zhí)行循環(huán)體
-
char temp = *left;// 臨時保存左指針指向的字符 *left = *right; // 將右指針指向的字符賦值給左指針指向的位置 *right = temp; // 將臨時保存的左指針字符賦值給右指針指向的位 ++left;// 左指針向后移動一位 --right;// 右指針向前移動一位
簡單來說,就是把最左邊和最右邊的元素位置互換。
-
Reverse()
函數(shù)執(zhí)行完后,返回main函數(shù),打印arr數(shù)組的內(nèi)容 -
使用
memset
函數(shù)將str數(shù)組清零,為下一次讀取做準備。 -
程序會一直循環(huán),知道用戶不輸入為止。
簡單來說,就是把最左邊和最右邊的元素位置互換。 -
Reverse()
函數(shù)執(zhí)行完后,返回main函數(shù),打印arr數(shù)組的內(nèi)容 -
使用
memset
函數(shù)將str數(shù)組清零,為下一次讀取做準備。 -
程序會一直循環(huán),知道用戶不輸入為止。