2 字符串处理转换
问题描述:
在给定字符串中找出单词( “单词”由大写字母和小写字母字符构成,其他非字母字符视为单词的间隔,如空格、问号、数字等等;另外单个字母不算单词);找到单词后,按照长度进行降序排序,(排序时如果长度相同,则按出现的顺序进行排列),然后输出到一个新的字符串中;如果某个单词重复出现多次,则只输出一次;如果整个输入的字符串中没有找到单词,请输出空串。输出的单词之间使用一个“空格”隔开,最后一个单词后不加空格。
要求实现函数:
void my_word(charinput[], char output[])
【输入】 char input[], 输入的字符串
【输出】 char output[],输出的字符串
【返回】 无
示例
输入:charinput[]="some local buses, some1234123drivers" ,
输出:charoutput[]="drivers local buses some"
输入:charinput[]="%A^123 t 3453i*()" ,
using namespace std;
int main()
{
char a[] = {"hello1345world...IAM,qinaide,hello,you,whatare you.you"}; //输入
char **p= new char*[strlen(a)]; //记录拆分后的数组,比如"hello","world"
char *b = new char[sizeof(a)]; //输出
strcpy(b, "\0");
{
p[j] = new char[sizeof(a)];
while((a[i] >= 'a' && a[i] <= 'z') || (a[i] >= 'A' && a[i] <= 'Z'))
{
p[j][length++] = a[i];
i++;
}
while(!((a[i] >= 'a' && a[i] <= 'z') || (a[i] >= 'A' && a[i] <= 'Z')))
{
i++;
}
p[j][length++] = '\0';
j++;
length = 0;
{
char *temp = p[i];
if(strlen(p[i]) > strlen(p[i-1]))
{
for(k =i; k >0 && strlen(p[k-1]) < strlen(temp); k--)
{
p[k]= p[k-1];
}
p[k]= temp;
}
}
for(i = 0; i < j; i++)
{
flag[i] = 0;
for(k = i-1; k > 0; k--)
{
if(!strcmp(p[k], p[i]))
{
flag[i] = 1;
}
else
for(i = 0; i < j; i++)
{
if(!flag[i])
{
strcat(b, p[i]);
strcat(b, " ");
}
}
delete []p[i];
delete []p;
delete flag;
p = NULL;
}
问题描述:
在给定字符串中找出单词( “单词”由大写字母和小写字母字符构成,其他非字母字符视为单词的间隔,如空格、问号、数字等等;另外单个字母不算单词);找到单词后,按照长度进行降序排序,(排序时如果长度相同,则按出现的顺序进行排列),然后输出到一个新的字符串中;如果某个单词重复出现多次,则只输出一次;如果整个输入的字符串中没有找到单词,请输出空串。输出的单词之间使用一个“空格”隔开,最后一个单词后不加空格。
要求实现函数:
void my_word(charinput[], char output[])
【输入】 char input[], 输入的字符串
【输出】 char output[],输出的字符串
【返回】 无
示例
输入:charinput[]="some local buses, some1234123drivers" ,
输出:charoutput[]="drivers local buses some"
输入:charinput[]="%A^123 t 3453i*()" ,
输出:charoutput[]=""
源代码
#include<iostream>
using namespace std;
int main()
{
char a[] = {"hello1345world...IAM,qinaide,hello,you,whatare you.you"}; //输入
char **p= new char*[strlen(a)]; //记录拆分后的数组,比如"hello","world"
char *b = new char[sizeof(a)]; //输出
strcpy(b, "\0");
int i = 0, length = 0, j = 0, k = 0;
//拆分单词,用p[j]保存(j=0,1,2...)
while(i < strlen(a) && j < strlen(a)){
p[j] = new char[sizeof(a)];
while((a[i] >= 'a' && a[i] <= 'z') || (a[i] >= 'A' && a[i] <= 'Z'))
{
p[j][length++] = a[i];
i++;
}
while(!((a[i] >= 'a' && a[i] <= 'z') || (a[i] >= 'A' && a[i] <= 'Z')))
{
i++;
}
p[j][length++] = '\0';
j++;
length = 0;
}
//插入排序,将单词从长到短排序
for(i = 1; i < j; i++){
char *temp = p[i];
if(strlen(p[i]) > strlen(p[i-1]))
{
for(k =i; k >0 && strlen(p[k-1]) < strlen(temp); k--)
{
p[k]= p[k-1];
}
p[k]= temp;
}
}
for(i = 0; i < j; i++)
cout<<p[i]<<endl;
//去重复操作,定义一个标志位数组,如果单词重复出现,
//则将其标志位设置为1,在
扫描二维码关注公众号,回复:
2259817 查看本文章
// 输出的时候如果标志位为1则不输出
int *flag = new int[j];
for(i = j-1; i >0; i--){
flag[i] = 0;
for(k = i-1; k > 0; k--)
{
if(!strcmp(p[k], p[i]))
{
flag[i] = 1;
}
else
continue;
}
}for(i = 0; i < j; i++)
{
if(!flag[i])
{
strcat(b, p[i]);
strcat(b, " ");
}
}
cout<<b<<endl; //打印结果
//释放指针
for(i = 0; i < j; i++)delete []p[i];
delete []p;
delete flag;
p = NULL;
}