目錄
例子:
思路方法:
?編輯
?(分板塊)代碼的實(shí)現(xiàn):
一.字符串的獲?。?種簡單的方法)
1.用gets()函數(shù),即使中間有空格也會讀取
2.用fgets()函數(shù)? ? ?
3.用scanf("%[^\n]s")讀取也可以達(dá)到同樣的效果
二.字符串倒置代碼的實(shí)現(xiàn):
字符串倒置的代碼實(shí)現(xiàn):
?三.每個單詞的倒置代碼實(shí)現(xiàn):
整個代碼的實(shí)現(xiàn):
?知識點(diǎn)總結(jié):
例子:
"I like beijing.",經(jīng)過處理后變?yōu)椋?beijing. like I"。
//字符串長度不超過100。(注意不是簡單的將字符串全部倒置);
思路方法:
方法:
第一步:先將字符串全部倒置;
第二步:將每個單詞進(jìn)行倒置;
方法2:
也可以先進(jìn)行單詞倒置,在將整個字符串倒置;
圖解:
?
?
(分板塊)代碼的實(shí)現(xiàn):
一.字符串的獲?。?種簡單的方法)
注意:
這里我們不能通過循環(huán)用scanf函數(shù)來讀??;因?yàn)?span style="color:#fe2c24;">scanf()函數(shù)遇到空格就停止讀取;
例如
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
char arr[100];
int i = 0;
while (scanf("%s", &arr) != EOF)
{
;
}
return 0;
}
當(dāng)輸入? “ i? like? ?beijing." 時,arr的內(nèi)容為:
?
解決方法:
1.用gets()函數(shù),即使中間有空格也會讀取
#include <stdio.h>
int main()
{
char arr[100];
printf("獲取字符\n");
gets(arr);
printf("\narr字符串的內(nèi)容為:%s\n",arr);
return 0;
}
運(yùn)行結(jié)果:
?
?
2.用fgets()函數(shù)? ? ?
?gets(arr,100,stdin)
用法:fgets(讀取的字符放大位置(如要放入arr里),限制最多讀取多少(如限制最多讀取100字符,在哪里讀取(如從鍵盤上獲取stdin));
stdin——>標(biāo)準(zhǔn)輸入—鍵盤;
注意:fgets會把(\n)回車作為字符獲??;如果\n影響代碼實(shí)現(xiàn),不想要\n,可以在讀取后,計算字符串長度然后將最后一個字符換為\0;
#include <stdio.h>
int main()
{
char arr[100];
printf("獲取字符\n");
fgets(arr,100,stdin);
printf("\narr字符串的內(nèi)容為:%s\n", arr);
return 0;
}
?刪去\n:
#include <stdio.h>
int main()
{
char arr[100];
printf("獲取字符\n");
fgets(arr,100,stdin);
//計算字符串長度(不用sizeof的原因在在其他博客作品
//”strlen和sizeof的區(qū)別及用法中“有寫過)
int len = strlen(arr);
//將最后一個字符\n用\0取代,從而刪去\n
arr[len - 1] = '\0';
printf("\narr字符串的內(nèi)容為:%s\n", arr);
return 0;
}
效果:
3.用scanf("%[^\n]s")讀取也可以達(dá)到同樣的效果
加了[^\n]——>意思是一直讀取,直到遇到 \n?(回車),即使中間有空格
#include <stdio.h>
int main()
{
char arr[100];
printf("獲取字符\n");
while (scanf("%[^\n]s", &arr) != EOF)
{
;
}
printf("\narr字符串的內(nèi)容為:%s\n", arr);
return 0;
}
運(yùn)行結(jié)果:(不會像最前面那樣遇到空格就停止讀?。?/span>
?
二.字符串倒置代碼的實(shí)現(xiàn):
因?yàn)楹竺鎲卧~的倒置和字符串的倒置相同,所以這里分裝一個函數(shù) ReversrArr( ) 來實(shí)現(xiàn)倒置;
這里參數(shù)只需將字符串的初末元素地址傳入,用指針char* left? 和char* right接收
數(shù)組名即首元素地址,容易得到;
末元素地址可以用strlen(arr)函數(shù)得到長度,再用(arr+長度-1)得到;
?
字符串倒置的代碼實(shí)現(xiàn):
//字符串倒置代碼實(shí)現(xiàn)
void ReverseArr(char* left, char* right)
{
while (left < right)
{
char tmp = *left;//中間變量
*left = *right;
*right = tmp;
left++;
right--;
}
}
#include <stdio.h>
#include <string.h>
int main()
{
char arr[100];
printf("獲取字符\n");
gets(arr);
//計算字符串的長度
int len = strlen(arr);
//倒置字符串
ReverseArr(arr,arr+len-1);
printf("%s\n",arr);
return 0;
}
運(yùn)行結(jié)果:
?三.每個單詞的倒置代碼實(shí)現(xiàn):
我們要用前面的?ReverseArr()需要知道每個單詞的起始(left)和(right)
由于每個單詞用 空格 隔開的,所以我們可以用 空格 來作為遍歷條件
?
代碼實(shí)現(xiàn):
//每個單詞的倒置
char* start = arr;
char* end = arr;
while (*end != '\0')
{
while (*end != ' ' && *end != '\0')
{
end++;
}
ReverseArr(start, end-1);
start = end + 1;
if (*end == ' ')
{
end++;
}
}
整個代碼的實(shí)現(xiàn):
//字符串倒置代碼實(shí)現(xiàn)
void ReverseArr(char* left, char* right)
{
while (left < right)
{
char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
#include <stdio.h>
#include <string.h>
int main()
{
char arr[100];
printf("獲取字符\n");
gets(arr);
/*printf("%s\n",arr);*/
//計算字符串的長度
int len = strlen(arr);
ReverseArr(arr,arr+len-1);
/*printf("%s\n",arr);*/
//每個單詞的倒置
char* start = arr;
char* end = arr;
while (*end != '\0')
{
while (*end != ' ' && *end != '\0')
{
end++;
}
ReverseArr(start, end-1);
start = end + 1;
if (*end == ' ')
{
end++;
}
}
printf("%s\n",arr);
return 0;
}
運(yùn)行結(jié)果:
?
知識點(diǎn)總結(jié):
1.該算法思想
2.字符串輸入(獲取)的3種方法
? ? ? ?1.? scanf("%[^\n]s",&arr)? ?注意:scanf("%s",&arr)遇到空格會停止讀取? ??
加了[^\n]——>意思是一直讀取,直到遇到 \n?(回車),即使中間有空格
? ? ? ?2.gets(arr)? ? 可以讀取空格
? ? ? ?3.fgets(arr,100,stdin)? ?
? ? ? ? ? ?arr --->讀取的文本放在哪里(arr)
? ? ? ? ? 100--->讀取的最大限制
? ? ? ? ? stdin--->標(biāo)準(zhǔn)輸入----鍵盤
? ? ? ? ??注意:fgets會把(\n)回車作為字符獲??;如果\n影響代碼實(shí)現(xiàn),不想要\n,可以在讀取? ? ? ? ? ? ? ? 后,計算字符串長度然后將最后一個字符換為\0;刪除方法示例在前面fgets處文章來源:http://www.zghlxwxcb.cn/news/detail-466538.html
3.倒置字符串和單詞的方法文章來源地址http://www.zghlxwxcb.cn/news/detail-466538.html
到了這里,關(guān)于(c語言)將一句話的單詞進(jìn)行倒置,標(biāo)點(diǎn)不倒置(i like beijing.)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!