目录
1.问题描述
2.问题求解及代码实现
1.问题描述
将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I
题目牛客网链接倒置字符串__牛客网 (nowcoder.com)
2.问题求解及代码实现
将一个字符串逆序我想应该难不倒大家,但本题要求为将单词进行倒置,而单词顺序不倒置,这时候传统的逆序方法就满足不了我们的需求,这里我们想到下面的算法解决这个问题。
以 I love China. 为例,我们先以空格为间隔,将每个单词倒置。这样便得到了I evol .anihC
然后我们再对整个字符串进行倒置,我们便可得到我们想要的结果China. love I
Ok方法介绍完了下面介绍代码如何实现,首先我们需要一个倒置字符串的函数,这个函数有很多种方法,这里为了本题方便,我们使用指针的方法来实现。下面是具体代码:
void reverse(char *left,char*right)
{
char tmp = 0;
while (left < right)
{
tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
有了这个函数后,接下来的难点是如何以空格为界限将每个单词逆序,我们创建两个指针start和end,在*end!=' '时,end++,直到*end=' '时,我们将start和end-1作为参数调用上述倒置函数,再对start和end重新赋值,直到end为'\0'为止。注意!!!我们对end++时也要注意end是否为\0,否则可能会出现意想不到的错误。再对每个单词倒置之后我们再对整个字符串进行倒置,最后就能打印出我们想要的结果。下面是完整代码:
void reverse(char *left,char*right)
{
char tmp = 0;
while (left < right)
{
tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
int main()
{
char s[100] = { 0 };
gets(s);
int len = strlen(s);
char* start = s;
char* end = start;
while (*end != '\0')
{
while (*end != ' ' && *end != '\0')
{
end++;
}
reverse(start, end-1);
if (*end == '\0')
start = end;
else
start = end + 1;
end = start;
}
reverse(s, s+len-1);
printf("%s", s);
return 0;
}
本文到此结束,感谢大家的阅读,欢迎点赞评论互关,祝大家万事如意。