1. 程式人生 > >c++ 刷題

c++ 刷題

1、百度面試題之給定數字字串轉為相應數字。如“987”轉為987。

程式碼:

#include<iostream>
#include<typeinfo>
using namespace std;

int str2num(string str)
{
	int temp = 0;
	for(int i = 0; i < strlen(str.c_str()); i++)
	{
		temp = temp * 10 + int(str[i]) - 48;//將字元轉為 ascii 碼直接int即可,注意此後的ascii到數字的轉換
	}
	return temp;
}

int main()
{
	int num;
	string str = "987";
	num = str2num(str);
	cout<< "the num is " << num << endl;
	cout<< "the type of num is :" << typeid(num).name() <<endl;
	system("pause");
}

2、百度面試,刪除給定字串中重複的字元,並保持字元原順序,不能重新申請記憶體。如“nihao,nihao”變為“nihao”。

#include<iostream>
using namespace std;

void delete_p(char str[],char * p)//後一個字元向前一個元素覆蓋
{
	char *q =p;
	while(*p != '\0')
	{
		*p = *(p + 1);
		p++;
	}
	*p = '\0';
	p = q - 1; 
}

void delete_repeat(char str[])
{
	char * start = str;
	char * p = str;
	while( *p != '\0')
	{
		for(char * ptr = start; ptr != p; ptr++)
		{
			if(*ptr == *p)
			{
				delete_p(str, p);
			}
		}
		p++;
	}
}


int main()
{
	char str[] = "nihao,nihao";
	delete_repeat(str);
	cout << str << endl;
	system("pause");
	return 0;
}