题目一、问题描述:
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。
实现代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <limits.h>
#include<String.h>
void doReverse(char *string,int left,int right){
if(string==NULL || left>=right)return;
while(left<right){
char temp = string[right];
string[right]=string[left];
string[left]=temp;
left++;
right--;
}
}
void reverse(char *string,int len){
if(string==NULL || len<=0)return ;
doReverse(string,0,len-1);
int wordBegin=0,wordEnd=0;
int i;
while(string[wordBegin]!='\0'){
if(string[wordBegin]==' '){
wordEnd++;
wordBegin++;
}else if(string[wordEnd]==' ' || string[wordEnd]=='\0'){
doReverse(string,wordBegin,--wordEnd);
wordBegin=++wordEnd;
}else{
wordEnd++;
}
}
return ;
}
int main(int argc, char *argv[])
{
char string[] = {
" i am a student. "
};
int len = strlen(string);
reverse(string,len);
printf("%s\n",string);
return 0;
}
问题二、
问题描述:
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串的左旋操作的功能。
例如:
输入字符串"abcdefg"和数字2,返回的结果是"cdefgab"。
实现代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <limits.h>
#include<String.h>
void doReverse(char *string,int left,int right){
if(string==NULL || left>=right)return;
while(left<right){
char temp = string[right];
string[right]=string[left];
string[left]=temp;
left++;
right--;
}
}
void reverse(char *string,int position,int len){
if(string==NULL || len<=0 || position<=0 || position>len)return ;
doReverse(string,0,position-1);
doReverse(string,position,len-1);
doReverse(string,0,len-1);
return ;
}
int main(int argc, char *argv[])
{
char string[] = {
"abcdefgh"
};
int len = strlen(string);
int position;
scanf("%d",&position);
reverse(string,position,len);
printf("%s\n",string);
return 0;
}
参考资料:
剑指offer
备注:
转载请注明出处:http://blog.csdn.net/wsyw126/article/details/51386293
作者:WSYW126
|