4. 题目: 编写一个C函数,将”I am from shanghai ”倒置为”shanghai from am I”;
及将句子中的单词位置倒置,而不改变单词内部结构.
分析:可以先把字符串整体倒置,再把每个单词再倒置,就实现了功能。
下面是代码实现:
/************************************************************************
题目: 编写一个C函数,将”I am from shanghai ”倒置为”shanghai from am I”;
及将句子中的单词位置倒置,而不改变单词内部结构.
************************************************************************/
#include <stdio.h>
int mystrlen(const char *str)
{
int length = 0;
while (*str++)
{
length++;
}
return length;
}
void RevStr(char *str, int len) //字符串倒置函数
{
int i = 0;
char temp = 0;
for (i = 0; i < len / 2; i++)
{
temp = str[i];
str[i] = str[len - i - 1];
str[len - i - 1] = temp;
}
}
void RevSen(char *str, int len)
{
int count = 0;
RevStr(str, len); //先整体倒置
printf ("str = %s\n", str);
while (*str)
{
if (*str == ' ')
{
RevStr(str - count, count); //再将每个单词倒置
str++;
count = 0;
}
count++;
str++;
}
RevStr(str - count, count); //处理最后一个单词
}
int main()
{
char str[] = "I am from shanghai";
int len = mystrlen(str);
RevSen(str, len);
printf ("The result is %s\n", str);
return 0;
}
题目: 编写一个C函数,将”I am from shanghai ”倒置为”shanghai from am I”;
及将句子中的单词位置倒置,而不改变单词内部结构.
************************************************************************/
#include <stdio.h>
int mystrlen(const char *str)
{
int length = 0;
while (*str++)
{
length++;
}
return length;
}
void RevStr(char *str, int len) //字符串倒置函数
{
int i = 0;
char temp = 0;
for (i = 0; i < len / 2; i++)
{
temp = str[i];
str[i] = str[len - i - 1];
str[len - i - 1] = temp;
}
}
void RevSen(char *str, int len)
{
int count = 0;
RevStr(str, len); //先整体倒置
printf ("str = %s\n", str);
while (*str)
{
if (*str == ' ')
{
RevStr(str - count, count); //再将每个单词倒置
str++;
count = 0;
}
count++;
str++;
}
RevStr(str - count, count); //处理最后一个单词
}
int main()
{
char str[] = "I am from shanghai";
int len = mystrlen(str);
RevSen(str, len);
printf ("The result is %s\n", str);
return 0;
}