哎,没有接到笔试通知,不知道为啥就错过了。
之后见到题目,前两道编程题。其实都见过类似的题目,有点思路,但是直接快速完整实现出来,水平还是达不到。
这样的题目,也不算难,三道编程题至少AC两道才算可以。但是自己还是写代码写的少,需要多练习,增加熟练度。
第一道题,统计一个字符串中,出现的字母字符串,数字字符串和其他字符组成的字符串的个数。
思想非常简单直观,但对于边界条件以及何时将统计的数量进行增加要仔细考虑。
代码如下:
#include
#include
using namespace std;
int main()
{
string str;
getline(cin,str);
int a[3] = { 0, 0, 0 };
for (int i = 0; i < str.length()-1;){
while (((str[i] >'A' && str[i] <= 'Z') || (str[i] >= 'a' && str[i] <= 'z')) && i
while (((str[i] >'A' && str[i] <= 'Z') || (str[i] >= 'a' && str[i] <= 'z')) && i
++i;
}
a[0]++;
break;
}
while ((str[i] >='0'&& str[i] <= '9' ) && i
while ((str[i] >= '0' && str[i] <= '9') && i
++i;
}
a[1]++;
break;
}
while ((str[i] >= 0 && str[i] <= 47) || (str[i] >= 58 && str[i] <= 64) || (str[i] >= 91 && str[i] <= 96) || (str[i] >= 123) && i
while ((str[i] >= 0 && str[i] <= 47) || (str[i] >= 58 && str[i] <= 64) || (str[i] >= 91 && str[i] <= 96) || (str[i] >= 123) && i
++i;
}
a[2]++;
break;
}
}
for (int m = 0; m < 3; m++){
cout << a[m];
if (m < 2){
cout << ",";
}
}
system("pause");
return 0;
}
第二题是将字符串按照单词逐个反转的题目,也是常见题目。一般思想都是做两次翻转。整个字符串翻转,然后将单词逐个翻转。
例如:输入 i am student 输出:student am i
代码如下:
/*
对字符串进行逐词翻转;
*/
#include
using namespace std;
//编程实现字符串中各单词的翻转
//方法1
void Revese(char *str){
char *start = str, *end = str, *ptr = str; //开头,结尾,中间指针
while (*ptr++ != '\0')
{
if (*ptr == ' ' || *ptr == '\0') //找到一个单词
{
end = ptr - 1; //end指向单词末尾
while (start
swap(*start++, *end--); //把单词的字母逆置
start = end = ptr + 1; //指向下一个单词开头
}
}
start = str, end = ptr - 2;//start指向字符串开头,end指向字符串末尾
while (start
{
swap(*start++, *end--);
}
}
int main()
{
char Str[30] = "i am from henan";
Revese(Str);
cout << Str << endl;
getchar();
return 0;
}
方法二:
#include "stdafx.h"
#include
using namespace std;
//编程实现字符串中各单词的翻转
//方法2
void Revese(char *str){
char *start=str,*end=str,*ptr=str;
while (*ptr++!='\0');
end=ptr-2; //找到字符串末尾
while (start
{
swap(*start++,*end--);//将整个字符串逆置
}
start=str;//指向字符串开头
end=ptr-2;//指向字符串末尾
ptr=start;//指向字符串开头
while (*ptr++!='\0')
{
if (*ptr==' '||*ptr=='\0') //找到一个单词
{
end=ptr-1;//指向单词末尾
while (start
{
swap(*start++,*end--);
}
start=end=ptr+1;//指向下一个单词开头
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
char Str[30]="i am from henan";
Revese(Str);
cout<
getchar();
return 0;
}