华为笔试题,关于操控字符串
2016-10-17 22:58
190 查看
问题描述:
输入字符串例如:there is a pig,,,.,pig is good.
输出:there is a pig good
去掉字符串中所有非字母的字符,并删去重复单词
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *change(char *str)
{
if (str == NULL)
{
return NULL;
}
int len = strlen(str);
char *p[1024] = { 0 };
int count = 0;
for (int i = 0; i < len; i++)
{
if (!((str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z')))//不是字母的变为空格
{
str[i] = ' ';
}
}
char *temp = str;
while (*temp == ' ')
{
temp++;
}
p[count++] = temp;//查找并指向第一个不位空格的字符
while (*temp != '\0')
{
if (*temp != ' ')
{
temp++;
}
else
{
*temp++ = '\0';//将字符后的空格置为\0
while (*temp == ' ')//过滤掉多余的空格
{
temp++;
}
if (*temp == '\0')//如果末尾有很多,遇到/0退出
{
break;
}
p[count++] = temp;//指向空格后的第一个字符
}
}
for (int i = 0; i < count - 1; i++)
{
for (int j = i + 1; j < count; j++)
{
if (p[i] != NULL && p[j] != NULL)
{
if (strcmp(p[i], p[j]) == 0)//重复字符置空
{
memset(&p[j], 0, 4);
}
}
}
}
char *return_str = (char *)malloc(sizeof(char) * 1024);
if (return_str == NULL)
{
return NULL;
}
memset(return_str, 0, 1024);
for (int i = 0; i < count; i++)
{
if (p[i] != NULL)
{
strcat(return_str, p[i]);
strcat(return_str, " ");
}
}
int last_len = strlen(return_str);
return_str[last_len - 1] = '\0';
return return_str;
}
void test()
{
char str[1024] = { " there is is" };
char *p = change(str);
if (p == NULL)
{
return;
}
printf("%s", p);
if (p != NULL)
{
free(p);
p = NULL;
}
}
void main()
{
test();
system("pause");
}
输入字符串例如:there is a pig,,,.,pig is good.
输出:there is a pig good
去掉字符串中所有非字母的字符,并删去重复单词
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *change(char *str)
{
if (str == NULL)
{
return NULL;
}
int len = strlen(str);
char *p[1024] = { 0 };
int count = 0;
for (int i = 0; i < len; i++)
{
if (!((str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z')))//不是字母的变为空格
{
str[i] = ' ';
}
}
char *temp = str;
while (*temp == ' ')
{
temp++;
}
p[count++] = temp;//查找并指向第一个不位空格的字符
while (*temp != '\0')
{
if (*temp != ' ')
{
temp++;
}
else
{
*temp++ = '\0';//将字符后的空格置为\0
while (*temp == ' ')//过滤掉多余的空格
{
temp++;
}
if (*temp == '\0')//如果末尾有很多,遇到/0退出
{
break;
}
p[count++] = temp;//指向空格后的第一个字符
}
}
for (int i = 0; i < count - 1; i++)
{
for (int j = i + 1; j < count; j++)
{
if (p[i] != NULL && p[j] != NULL)
{
if (strcmp(p[i], p[j]) == 0)//重复字符置空
{
memset(&p[j], 0, 4);
}
}
}
}
char *return_str = (char *)malloc(sizeof(char) * 1024);
if (return_str == NULL)
{
return NULL;
}
memset(return_str, 0, 1024);
for (int i = 0; i < count; i++)
{
if (p[i] != NULL)
{
strcat(return_str, p[i]);
strcat(return_str, " ");
}
}
int last_len = strlen(return_str);
return_str[last_len - 1] = '\0';
return return_str;
}
void test()
{
char str[1024] = { " there is is" };
char *p = change(str);
if (p == NULL)
{
return;
}
printf("%s", p);
if (p != NULL)
{
free(p);
p = NULL;
}
}
void main()
{
test();
system("pause");
}
相关文章推荐
- 华为2013年的一题上机笔试题(关于字符串)
- 都是'\0'惹的祸——中兴一道关于字符串的笔试题详解
- 华为2013校园招聘上机笔试题-整数转换成字符串
- 华为笔试题:递归打印输出子字符串
- 关于华为的一道笔试题(传值和传引用)
- 华为的两道笔试题:字符串循环移动;大数求余问题
- 关于截取字符串的java笔试(面试)题简化代码实现
- 华为笔试:删除字符串中出现次数最少的字符
- 2014华为实习上级笔试题-- 统计字符串中出现的单词
- 关于"字符串"的笔试,面试题
- 关于js字符串替换的一道笔试题目
- 华为2013校园招聘上机笔试题-对源字符串中的字符串进行查找替换
- 华为上机笔试之通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
- 一道关于字符串逆置的笔试题
- 华为笔试—在字符串A中删除字符串B中的全部字符
- 华为笔试之字符串旋转
- 去掉字符串中重复的字符 --- 华为笔试题
- 2013年9月华为成都笔试题 输入字符串计算数值(c语言)
- 华为2013校园招聘上机笔试题 ---2 字符串处理转换
- 【c++】【2015华为笔试】分解字符串