用C++语言实现,将一句话中的单词进行倒置(单词之间倒转,单词本身不倒置),标点符号不导致。
比如一句话“I come from tianjin. “,倒置后变成“tianjin. from come I ”。
C常见的库函数有:
int strstr(const char* string,const char* substring) 用于返回主串中子串的位置以后的所有字符。比如主串是“123456789”,子串是“234”,则返回“23456789”。
char* strcpy(char* DestStr,const char* SrcStr) 复制字符串函数
int strcmp(const char* str1,const char* str2) 比较两个字符串
char* strcat(char* destStr,const char* srcStr) 连接字符串
没有太合适题意的库函数,因此想办法不用库函数,自己进行倒置。下面的是自己的实现,不足之处,还望指正!!!
#include "stdafx.h"
#include <iostream>
using namespace std;
char *strReverse(char * sourcestr)
{
int j = 0, i = 0,begin,end;
char *str = sourcestr;
char temp;
j = strlen(str) - 1;
cout << " string = " << str << endl;
//先将字符串进行全部倒转 变成 .nijnaiT morf emoc I
while (j > i)
{
temp = str[i];
str[i] = str[j];
str[j] = temp;
j --;
i ++;
}
cout << " string = " << str << endl;
//然后进行按单词部分反转,遇到空格,则判断出一个单词结束
i = 0;
while (str[i])
{
if (str[i] != ' ')
{
begin = i;
while (str[i] && str[i] != ' ')
{
end = i;
i++;
}
if (str[i] == '\0') //字符串的结束符
{
i--;
}
}
while (end > begin)
{
temp = str[begin];
str[begin] = str[end];
str[end] = temp;
end --;
begin ++;
}
i ++;
}
cout << " string = " << str << endl;
return str;
}
int _tmain(int argc, _TCHAR* argv[])
{
char str[] = "I come from Tianjin.";
strReverse(str);
return 0;
}