【问题二】 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。 为简单起见,标点符号和普通字母一样处理。 例如将“I am a student”转化为"student a am I"。 解答: 两次逆转:先逆转整个句子,然后逆转各个单词;或者,先逆转每个单词,然后逆转整个句子。
//字符串逆转
void Reverse(char *str,int length)
{
if(str ==NULL|| length <= 0)
{
return;
}
int i = 0;
int j = length - 1;
while(i < j)
{
char tmp = str[i];
str[i]= str[j];
str[j]= tmp;
i++;
j--;
}
}
//逆转句子
void ReverseSentence(char *str,int length)
{
if(str ==NULL|| length <= 0)
{
return;
}
//逆转整个句子
Reverse(str, length);
//逆转各个单词
char *slow = str;
char *fast = str;
while(*fast !='\0')
{
while(*fast !=''&&*fast !='\0')
{
fast++;
}
if(*fast =='\0')
{
break;
}
//逆转单词
intlen= fast - slow;
Reverse(slow,len);
fast++;
slow = fast;
}
//逆转最后一个单词
Reverse(slow, fast - slow);
}
【问题三】 比较两个字符串,用O(n)的时间复杂度和O(1)的空间复杂度。 解答:
//比较字符串
int str_strcmp(const char *strone,const char *strtwo)