輸入一個英文句子,翻轉句子中的單詞,要求單詞內的字元順序不變。 如: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
相關推薦
輸入一個英文句子,翻轉句子中的單詞,要求單詞內的字元順序不變。 如: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 stud
給定一字串,將每個單詞的字元順序倒置,單詞間的順序不變。例如:輸入字串“I love you”,輸出“I evol uoy”。
#include <iostream> #include <sstream> using namespace std; //計算並返回字串長度 int Length(char *str) { int length=0; while((
輸入一個英文句子,翻轉句子中單詞的順序,但單詞內字元的順序不變。(筆試題) 句子中單詞以空格符隔開。為簡單起見,沒有標點符號。 例如輸入“I am a student”,則輸出“student a
輸入一個英文句子,翻轉句子中單詞的順序,但單詞內字元的順序不變。(筆試題)句子中單詞以空格符隔開。為簡單起見,沒有標點符號。例如輸入“I am a student”,則輸出“student a am I” #include <stdio.h> #include
每天學習一點程式設計(2)(輸入一個英文句子,翻轉句子中單詞的順序,但單詞內字元的順序不變)
輸入一個英文句子,翻轉句子中單詞的順序,但單詞內字元的順序不變。句子中單詞以空格符隔開。為簡單起見,標點符號和普通字母一樣處理。 例如輸入“I am a student.”,則輸出“student. a am I”。 /*題目描述:翻轉句子中單詞的順序,但單詞內字元的順序
首字母變大寫 --輸入一個英文句子,將每個單詞的第一個字母改成大寫字母。
題目描述: Problem Description 輸入一個英文句子,將每個單詞的第一個字母改成大寫字母。 Input 輸入資料包含多個測試例項,每個測試例項是一個長度不超過100的英文句子,佔一行。
編寫一個程式,輸入一個英文句子,將其中單詞位置倒置,單詞內部結構不變。例如“I am from shanghai”倒置為“shanghai from am I”。
#include<stdio.h> #include<string.h> void change(char *str) { char temp = 0; cha
字串操作,翻轉句子中單詞的順序--經典面試題兩種解法
題目:輸入一個英文句子,翻轉句子中單詞的順序,但單詞內字元的順序不變。 句子中單詞以空格符隔開。為簡單起見,標點符號和普通字母一樣處理。 例如輸入“I am a student.”,則輸出“stud
編寫程式,從鍵盤輸入 一個 英文字母(有若干行)。如果是大寫字母,則輸出它對應的小寫字母;如果是小寫字母,則輸出它對應的大寫字母。
撰寫人——軟工二班——陳喜平 題目描述 編寫程式,從鍵盤輸入 一個 英文字母(有若干行)。如果是大寫字母,則輸出它對應的小寫字母;如果是小寫字母,則輸出它對應的大寫字母。 輸入 一個英文字母。(有多組測試資料) 輸出 對應的小寫或者大寫字母,輸出後換行。 樣例輸入 A q 樣例輸
輸入一個整數陣列,實現一個函式來調整該陣列中數字的順序,使得所有的奇數位於陣列的前半部分, 所有的偶數位於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。
/** * * 輸入一個整數陣列,實現一個函式來調整該陣列中數字的順序,使得所有的奇數位於陣列的前半部分, * 所有的偶數位於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。 * * */ public class Solution { public stati
劍指offer題目描述 輸入一個整數陣列,實現一個函式來調整該陣列中數字的順序,使得所有的奇數位於陣列的前半部分,所有的偶數位於位於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。
牛客網劍指offer線上程式設計: 方法一:利用兩個指標,實現了是陣列奇數在前偶數在後,但通過不了測試用例,因為改變了奇數和奇數,偶數和偶數之間的相對位置 class Solution { public: void reOrderArray(vector<in
前端演算法:給定一個字串,找到它中的第一個非重複字元並返回它的索引
給定一個字串,找到它中的第一個非重複字元並返回它的索引。如果它不存在,則返回-1。 例子: s =‘leetcode’ 返回0。 s =‘loveleetcode’ 返回2。 注意:您可以假設該字串僅包含小寫字母。 <script> var
寫一個函式,輸入int型,返回整數逆序後的字串。如:輸入123,返回“321”。 要求必須用遞迴,不能用全域性變數,輸入必須是一個引數,必須返回字串
看了一下這個文章http://www.codeceo.com/article/alibaba-interview-java.html 順手寫了下 應該符合題目意思吧~~ #include <cstdio> #include <iostream> #i
青蛙(frog)杯第一屆棒球比賽開賽啦。 你現在是一名記分員,輸入一個字串陣列(比賽記錄情況),按如下規則計分: 1. 如果該字串是數字:代表當輪比賽的得分情況。 2. 如果該字串是“+”:
#include "stdafx.h" #include<stack> #include<vector> #include<iostream> using namespace std; int frogPoints(char
如何實現一個img元素在指定容器中水平,垂直居中
先寫出HTML結構: 分別對div,span,img加css程式碼: #content { position:absolute; top:0;bottom:0;left:0;right:0; margin:auto; /*上右下左外邊距
Python習題:給定一個字符串和一個偏移量,根據偏移量旋轉字符串(從左向右旋轉)。例:輸入: str="abcdefg", offset = 3 輸出: "efgabcd"
直接 spa ret code abcdefg int color bcd 旋轉字符串 方法一:用切片直接按照偏移量切割 1 def str_rotate(strings,num): 2 return strings[-(num%len(strings)):] +
用一個函式實現將一行字串中最短的單詞輸出。此行字串從主函式傳遞給該函式。假設字串中包含的單詞以空格作為分隔符號,例如”Asia Games 2010 is held in GuangZhou.”,其中最短的單詞是”is”和”in”。
山大 23:57:13 /* 輸入完單詞後不用再加空格!如果是兩個單詞一樣短還不能實現*/ #include<stdio.h>#include<string.h>void main(){int f(char str[],char str1[],int
取出一個字串中字母出現的次數。如:字串:"abcdekka27qoq" ,輸出格式為: a(2)b(1)k(2)
package com.heima.test; import java.io.FileWriter; import java.io.IOException; import java.util.Comp
陣列-字串_習題:輸入一個英文字串轉換其大小寫後輸出
# include <stdio.h># include <string.h>int main(void){ char str[50]; int i; printf("請輸入一個
題目:輸入一顆二元樹,從上往下按層列印樹的每個結點,同一層中按照從左往右的順序列印。
題目: 輸入一顆二元樹,從上往下按層列印樹的每個結點,同一層中按照從左往右的順序列印。 例如輸入 8 / \ 6 10 / \ / \ 5 7 9 11輸出8 6 10 5 7 9 11。 解題思路:利用佇列先進先出(FIFO)的性質,取出隊首元素,輸出隊
一個字串A的子串被定義成從A中順次選出若干個字元構成的串。如A=“cdaad" ,順次選1,3,5個字元就構成子串" cad" ,現給定兩個字串,求它們的最長共公子串。 小王對既是素數又是迴文的
一個字串A的子串被定義成從A中順次選出若干個字元構成的串。如A=“cdaad" ,順次選1,3,5個字元就構成子串" cad" ,現給定兩個字串,求它們的最長共公子串。 小王對既是素數又是迴文的數特