【C++学习笔记】day03
为准备复试上机而开始记笔记,仅记录新知识点,昨天做的太少了,今天多做一点
字符串转整数
#include <cstring>
int StrtoInt(char *str1){
int len1, tmp, po=1, sign=1,result=0;
len1 = strlen(str1);
if(str1[0]=='-')sign*=-1;
_strrev(str1);
for(int i=0; i<len1; i++){
tmp = str1[i]-'0';
if(tmp>=0 && tmp<10){
result += tmp*po;
po *= 10;
}
}
return result*sign;
}
不过oj可能会报错说_strrev函数并未定义;
既然如此,那就重写一下字符串反转函数
strrev函数实现
void _strrev(char *s)
{
if(NULL == s)
return;
char *pBegin = s;
char *pEnd = s + strlen(s) - 1;
char pTemp;
while(pBegin < pEnd)
{
pTemp = *pBegin;
*pBegin = *pEnd;
*pEnd = pTemp;
pBegin++, pEnd--;
}
}
双向链表定义
struct Node{
int data;
Node* next;
Node* previous;
Node(){}
Node(int _data):data(_data), next(NULL), previous(NULL){}
Node(int _data, Node* _next, Node* _previous):data(_data), next(_next), previous(_previous){}
};
class ListNode{
public:
ListNode();
~ListNode(){};
void addFirst(int);
void addLast(int);
private:
Node* header;
int amount;
int sum;
};
ListNode::ListNode(){//初始化很重要
header = new Node(0);
header->next = header;
header->previous = header;
amount = 0;
sum = 0;
}
void ListNode::addFirst(int element){
header->next->previous = new Node(element, header->next, header);
header->next = header->next->previous;
amount++;
sum+=element;
}
void ListNode::addLast(int element){
header->previous->next = new Node(element, header->next, header);
header->previous = header->previous->next;
amount++;
sum+=element;
}
int main(){
ListNode A1;
A1.addFirst(1);
A1.addFirst(2);
A1.addFirst(3);
}
链表的查找和删除暂时未放上去
switch语句用法
switch(A){
case B:
...;
break;
default:
...;
}
其中A的返回值拿来判定,并与B进行比较,若符合则执行对应代码(记得在末尾带上break)
注意:B必须为int或者const char。