面试时遇到一个C语言的题目,将"i am an engineer"转"engineer an am i",字符串特点是不定长度的字符串由多个子字符串和空格构成,最终将字符串中每个子字符串逆序形成最终字符串。
这里用指针方式处理字符串,源码如下:
#include <stdio.h>
#include <string.h>
char nixu_func1(char *str)
{
char destStr[256]={0};
char *ptr = str;
int konggeCnt = 0,i=0,j=0,k=0;
printf("source:%s\n",str);
while(*ptr!='\0')
{
if(*ptr==' ')
{
konggeCnt++;
}
ptr++;
}
ptr = str;
printf("konggeCnt=%d\n",konggeCnt);
for(i=0;i<=konggeCnt;i++)
{
while(j<(konggeCnt-i))
{
if(*(ptr++)==' ') j++;
}
j = 0;
while((*ptr!=' ') && (*ptr!='\0'))
{
destStr[k++] = *(ptr++);
}
destStr[k++] = ' ';
ptr = str;
}
printf("destStr:%s\n",destStr);
return 0;
}
int main(int argc, char *argv[])
{
char str[256]={"i am a coder"};
int i=0;
bzero(str,sizeof(str));
printf("source string:");
while(1)
{
char tempCh = 0;
scanf("%c",&tempCh);
if(tempCh!='\n')
{
str[i++]=tempCh;
}
else
{
str[i] = '\0';
break;
}
}
nixu_func1(str);
return 0;
}
运行结果如图:
起始也可以直接用sscanf函数将字符串中的子字符串全部提取出来,再按逆序排列,但是那个方法也同样需要先将字符中的空格数找出,所以用指针的方式稍微方便快捷一点。