輸入一個英文句子,翻轉句子中的單詞,要求單詞內的字元順序不變。 如:I am a student. 轉換成 student. a am I
輸入一個英文句子,翻轉句子中的單詞,要求單詞內的字元順序不變。
如:I am a student. 轉換成 student. a am I
演算法分析:
1、通過ReverseString(s,0,5)交換字串第0位和第5位的字元,將I am a student. 轉換成a am I student.
2、然後將字元向左移動一位變成 am I student.a
3、順序向左移動7次就成為了student. a am I
#include "iostream"
#include <stdio.h>
using namespace std;
void ReverseString(char *s,int from,int to)
{
//交換from和to位置的字元
if(from<to)
{
char t = s[from];
s[from] = s[to];
s[to] = t;
}
}
void LeftShiftOne(char *s,int n)
{ //字串向左移動一位,最左邊一個字元放到最右邊
char t=s[0];
for(int i=1; i<n ;i++)
{
s[i-1] = s[i];
}
s[n-1]=t;
}
void LeftString(char *s,int n,int m)//向左移動m 次
{
while(m--)
{
LeftShiftOne(s,n);
}
}
int _tmain(int argc, _TCHAR* sargv[])
{
char *s="I am a Student.";//字串常量,不可通過指標修改char arr[]="I am a Student.";
int n=strlen(s);
cout<<s<<endl;
cout<<n<<endl;
ReverseString(s,0,5);
cout<<s<<endl;
LeftString(s,n,7);
cout<<s<<endl;
system("pause");
return 0;
}
以上程式碼執行到s[from]=s[to]會出現
projectOne.exe 中的 0x0086193f 處最可能的異常: 0xC0000005: 寫入位置 0x00867838 時發生訪問衝突
projectOne.exe 中的 0x0086193f 處有未經處理的異常: 0xC0000005: 寫入位置 0x00867838 時發生訪問衝突
不知道原因
由於char *s="I am a student.";是一個字串常量,是儲存在static記憶體塊裡,不能通過指標修改
所以需要把它改成:char arr[]="I am a student.";
方法二:
先翻轉每個單詞,然後再翻轉整個句子。如先將“I am a student.”反轉為“I ma a .tneduts”,然後再對中間結果“I ma a .tneduts”整體翻轉,即為 “student. a am I”。
#include <stdio.h>
#include <string.h>
//反轉一個單詞[from,to]區間內的字母
void reserveString(char arr[],int from, int to)
{
while(from < to)
{
char tmp = arr[from];
arr[from]= arr[to];
arr[to] = tmp;
from ++;
to --;
}
}
/*
//這樣寫也可以
void reverseString(char arr[],int from,int to)
{
for(int i=from;from<to;from++)
{
char tmp = arr[from];
arr[from] = arr[to];
arr[to] = tmp;
to--;
}
}
*/
//反轉一句話,以'\0'結尾
void reserve(char ch[], int len)
{
int i=0;
int from = 0;
int to = 0;
while(i<=len)//陣列中每個字元都要判定,包括'\0'
{
if(ch[to] == ' ' || ch[to]=='\0')
{
reserveString(ch, from,to-1); //先反轉每個單詞,[from,to-1]
from = ++to; //尋找下一個單詞。
}
else
{
to++;
}
i++;
}
reserveString(ch, 0,len-1); //再整體反轉
}
int main()
{
char arr[]="I am a student.";
int n=strlen(arr);
cout<<arr<<n<<endl;
reverseWord(arr,n);
cout<<arr<<endl;
reverseString(arr, 0, n-1);
cout<<arr<<endl;
system("pause");
return 0;
}
注意reverseString(arr, 0, n-1);//這邊不能寫成n,陣列的下標比實際長度小1
相關文章
- 力扣 - 劍指 Offer 58 - I. 翻轉單詞順序力扣
- 每日一練(31):翻轉單詞順序
- Ubuntu安裝劃詞翻譯軟體Goldendict 單詞翻譯 句子翻譯UbuntuGo
- JZ-044-翻轉單詞順序列
- 寫一個方法,將字串中的單詞倒轉後輸出,如:`my love` -> `ym evol`字串
- LeetCode 3014[輸入單詞需要的最少按鍵次數I]LeetCode
- I am lycc & Blog 目錄
- LeetCode-151-翻轉字串裡的單詞LeetCode字串
- python jieba庫,句子分詞PythonJieba分詞
- go練手:簡單的單詞格式轉換工具Go
- 中文句子的詞分割演算法:MaxMatch演算法
- 基於GRU和am-softmax的句子相似度模型 | 附程式碼實現模型
- 劍指offer—58.翻轉單詞順序列—分析及程式碼(Java)Java
- 將 AM6匯入到AM8的中文登入名改成英文登入名
- 2021-01-04 | 151. 翻轉字串裡的單詞字串
- 151.翻轉字串裡的單詞 卡碼網:55.右旋轉字串字串
- Vue 中英文轉換 vue-i18n 的使用Vue
- 以凡人之軀,比肩神明:“ I am iron man ”
- 力扣之反轉字串中的單詞 III力扣字串
- 讀取檔案,每行不超過100個字元,輸出每行中字母最多的單詞的字母數字元
- 關於 i=i++ 問題、入棧順序
- LeetCode每日一題:反轉字串中的單詞 III(No.557)LeetCode每日一題字串
- C語言英文單詞C語言
- SQL 操作指令 英文單詞SQL
- 【LeetCode字串#03】圖解翻轉字串中的單詞,以及對於for使用的說明LeetCode字串圖解
- 學習-Java順序結構之字元變換之大小寫字母轉換Java字元
- python:jieba:當你看完個這句子之後就會現發,裡這詞的字序是亂的PythonJieba
- “嵌入”在大語言模型中是解決把句子轉換成向量表示的技術模型
- python統計英文文字中的迴文單詞數Python
- 自學java筆記I 基本型別+轉義字元+資料型別的轉換Java筆記字元資料型別
- 英文單詞縮寫----DXNRY – Dictionary 字典
- 獨立遊戲佳作《I Am Dead》用歡樂的方式表現死亡遊戲
- 第五章 字串專題 ---------------- 5.8 題解:將字串中按單詞翻轉字串
- Python將所有的英文單詞首字母變成大寫Python
- 7-25 輸入單詞倒置 (10分)
- 將字串每一個單詞第一個字元設定為大寫字串字元
- 背單詞 純英文 2024年09月
- dsl 在打包構建生成程式碼中,是哪個英文單詞的縮寫