题目描述
对字符串中的所有单词进行倒排。
说明:
1、每个单词是以26个大写或小写英文字母构成;
2、非构成单词的字符均视为单词间隔符;
3、要求倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只允许出现一个空格间隔符;
4、每个单词最长20个字母;
输入描述:
输入一行以空格来分隔的句子
输出描述:
输出句子的逆序
示例1
输入
I am a student
输出
student a am I
本题考查知识点:字符串
本题难度:初级
#include <stdlib.h>
#include <string.h>
#include "oj.h"
/*
功能:
对字符串中的所有单词进行倒排。
输入:
char* pInput:给定的单词串
输出:
char* pOutput:倒排后的单词串
返回:
int:成功0,失败-1
*/
int Converse(char* pInput, char* pOutput)
{
char b[100];
char pOutput1[100];
int len = strlen(pInput);
int * a = (int *)malloc(len*sizeof(int));
char* poutput = (char *)malloc(len*sizeof(char));
int num = 0;
int count = 0;
for(int i = 0;i<len;i++)
{
if((pInput[i] >= 'a'&&pInput[i] <= 'z') || (pInput[i] >= 'A'&&pInput[i] <= 'Z'))
{
b[i] = pInput[i];
}
else
{
b[i] = ' ';
}
}
for(int i = 0;i<=len;i++)
{
if((b[i] == ' ')&&(b[i+1]) == ' ')
{
for(int j = i;j<len;j++)
{
b[j] = b[j+1];
}
len--;
i--;
}
}
b[len] = ' ';
for(int i = 0;i<=len;i++)
{
if((b[i] == ' ')&&(b[i+1]) != ' ')
{
a[++count] = i;//记录每个空格的位置,和空格数量
//count++;//注意:count++与++count的区别,count++导致a[count]=-842150451
}
}
for(int i = count;i > 1;i--)
{
memcpy(poutput,b+a[i-1],a[i]-a[i-1]);
for(int j = 0;j<(a[i]-a[i-1]);j++)
{
pOutput1[num++] = poutput[j];
}
//pOutput =
}
pOutput1[num] = ' ';//结束符'\0'与' '空格不同
for(int i = 0;i<len;i++)
{
if(pInput[i] != ' ')
{
pOutput1[++num] = pInput[i];
break;
}
}
for(int i = 0;i<len;i++)
{
pOutput[i] = pOutput1[i+1];
}
return 0;
}
第二种方法:同样runtimeerror
int Converse(char* pInput, char* pOutput)
{
/*string str;
str = pInput;//可以对str直接赋值
string temp;
for(int i=0;i<str.length;i++)
{
if(str[i] != ' '&&str[i] != '\0')
{
temp += str[i];
}
else
{
}
}*/
int flag =0,count=0;
char dic[20][20];
char *poutput;
int len = strlen(pInput),word = 0,num = 0;
for(int i = 0;i<len;i++)
{
if((pInput[i] >= 'a'&&pInput[i] <= 'z') || (pInput[i] >= 'A'&&pInput[i] <= 'Z'))
{
flag = 1;
dic[word][num++] = pInput[i];
}
else
{
if(flag == 1)
{
dic[word][num] = '\0';
num = 0;
//dic[word][num] = ' ';
//dic[word][num] = '\0';
word++;
flag = 0;
}
}
}
dic[word][num] = '\0';
for(int i = word;i>=0;i--)
{
if(dic[i][0] != '\0')
{
poutput = dic[i];
}
int len1 = strlen(poutput);
for(int j = 0;j<len1;j++)
{
pOutput[count++] = poutput[j];
}
if(i != 0)
pOutput[count++] = ' ';
}