面试题:把字符串“I am a student”反转成为“student a am I”,不借助任何库函数。

rt:

把字符串“I am a student”反转成为“student a am I”,不借助任何库函数,以及把整个字符串逆序。

// fanzhuan.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <stdio.h>

int length(char *str) {
int leng = 0;
while (*str++)
leng++;
return leng;
}

void rev_str_by_one(char *str) {
int a = length(str);
int t = a;
int temp;
//从尾巴到头一个个的字母逆序,一直进行到(t+1)/2这个地方即可。
for (int i = 0; i < (t+1)/2; i++, a--) {
temp = str[i];
str[i] = str[a-1];
str[a-1] = temp;
}

}

void RevStr(char src[]) {
//开始的时候把src赋地址给start和end以及一个指针p,他们都指向首地址!
char *start=src, *end=src, *p=src,e;
int i=0;
do
{
//相当于一个个单词进行逆序,然后整体逆序一次就是所需结果!
//首先把p移到特殊的“字母”之上,然后end放到单词最后的一个正常“字母”之上,然后执行一次单词的逆序。
if(*p==' ' || *p==',' || *p=='.' || *p==';' || *p=='!' || !*p)
{
i=1,end=p-1;
while(start < end)
e= *start, *start++ = *end, *end-- = e;
}
//在执行一个单词之后,start跳到下一个单词的首地址上去,
if(i)
start=p+1, i=0;
}while(*p++);

while(src < end)
e= *src, *src++ = *end, *end-- = e;

}

int main() {

char src[]="thankyou,myfriend!!!";
int a = length(src);
printf("src length = %d\n",a);
rev_str_by_one(src);
printf("%s\n",src);

char s[]="thank you,my friend!!!";
RevStr(s);
printf("%s\n",s);
return 0;
}

你可能感兴趣的:(面试)