輸入一個英文句子,翻轉句子中的單詞,要求單詞內的字元順序不變。 如: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
相關文章
- Ubuntu安裝劃詞翻譯軟體Goldendict 單詞翻譯 句子翻譯UbuntuGo
- 將字串中的每個單詞順序進行顛倒,單詞還是原來的單詞,字母順序不發生變化字串
- (字串)句子翻轉字串
- 軟體工程導論課後習題Github作業(把一個英文句子中的單詞次序逆序,單詞中字母正常排列)軟體工程Github
- I Am The Captain of My SoulAPTAI
- 將數字轉換成單詞形式
- python jieba庫,句子分詞PythonJieba分詞
- I am lycc & Blog 目錄
- 中文句子的詞分割演算法:MaxMatch演算法
- 基於GRU和am-softmax的句子相似度模型 | 附程式碼實現模型
- go練手:簡單的單詞格式轉換工具Go
- 統計一個字串中的單詞的個數,並列印各個單詞字串
- 2008.1.3 Chat room? I've heard it but I am not into it.OOM
- js如何實現將字串中的字元順序翻轉JS字串字元
- I am Back :) 貼個安裝程式的破解 (6千字)
- 翻譯的誤區(一):不知道把名詞轉換為動詞
- 劍指offer—58.翻轉單詞順序列—分析及程式碼(Java)Java
- css實現的將英文單詞進行大小寫轉換程式碼例項CSS
- LeetCode-151-翻轉字串裡的單詞LeetCode字串
- C語言英文單詞C語言
- SQL 操作指令 英文單詞SQL
- (C++字串大小寫轉換)相似的句子C++字串
- [CareerCup] 18.10 Word Transform 單詞轉換ORM
- 2008 3 26:I am going to hit the sack,I'm exhaustedGo
- 力扣之反轉字串中的單詞 III力扣字串
- 蘋果獨家銷售Will.i.am新款藍芽耳機蘋果藍芽
- python:jieba:當你看完個這句子之後就會現發,裡這詞的字序是亂的PythonJieba
- PostgreSQL中英文混合分詞特殊規則(中文單字、英文單詞)-中英分明SQL分詞
- Linux英文單詞縮寫Linux
- 中文詞法分析的簡單程式 (轉)詞法分析
- Vue 中英文轉換 vue-i18n 的使用Vue
- 151.翻轉字串裡的單詞 卡碼網:55.右旋轉字串字串
- 修改一個列表中的一個單詞小技巧筆記筆記
- 學習-Java順序結構之字元變換之大小寫字母轉換Java字元
- 獨立遊戲佳作《I Am Dead》用歡樂的方式表現死亡遊戲
- 2021-01-04 | 151. 翻轉字串裡的單詞字串
- 讀取檔案,每行不超過100個字元,輸出每行中字母最多的單詞的字母數字元
- js查詢包含字元最多的單詞的字元長度JS字元