c语言实现单词逆序输出。
如:"I am from shanghai"
输出: "shanghai from am i"
#include <stdio.h>
#include <string.h>
void swap(char* head, char* tail);//实现字符串逆序
int main()
{
char str[] = "I am from shanghai";
char* p1 = str;
char* p2 = str + strlen(str) - 1;
char* p3 = str;
//字符串整体逆序
swap(p1, p2);
while(*p1)
{
if (*p1 == ' ')
{
//每个单词逆序
swap(p3, p1 - 1);
p3 = p1 + 1;
}
p1++;
}
//最后一个单词逆序
swap(p3, p2);
printf("%s\n", str);
return 0;
}
void swap(char* head, char* tail)
{
while (head < tail)
{
char temp = *head;
*head++ = *tail;
*tail-- = temp;
}
}
运行结果:
手动输入一段单词串:
方法一:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str;
while(getline(cin,str))
{
int pos=str.length()-1;
for(int i=pos;i>0;i--)
{
if(str[i]==' ')
{
cout<<str.substr((i+1),(pos-i))<<' ';
pos=i-1;
}
}
cout<<str.substr(0,pos+1)<<endl;
}
return 0;
}
方法二:
#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
void mySwap(char *p1, char *p2)
{
while (p1 <= p2)
{
swap(*p1++, *p2--);
}
}
int main()
{
char str[1000];
gets(str);
mySwap(str, str + strlen(str) - 1);
char *p1 = str;
for (int i = 0; i < strlen(str); i++)
{
if (' ' == str[i])
{
char *p2 = &str[i];
mySwap(p1, p2 - 1);
p1 = p2 + 1;
}
}
mySwap(p1, str + strlen(str) - 1);
cout << str << endl;
}