目录
4.请使用指针完成两个字符串str1和str2的比较。比较规则如下:
1.请使用指针去掉整数一维数组中重复的元素。
比如:
输入 1 2 3 4 2 3 5 6 6 7
输出 1 2 3 4 5 6 7
#include<iostream>
using namespace std;
int remove_samenum(int *p_s,int*p_e,int n)//参数:数组指针start,数组指针end,数组长度
{
int start=0;
for(int i=0;i<n;i++)
{
if(*p_s==*p_e)//相同,移动指针往后移动一位,基准指针不动
{
p_e++;//因为开始的时候p_e就比p_s多一位,所以到最后总会有不同的
}
else if(*p_s!=*p_e)//不相同 ,游标指针复制到基准指针的下一位,游标指针和基准指针均向下移动一位
{
p_s++;
*p_s=*p_e;
p_e++;
start++;
}
}
return start;//返回值基准指针的值
}
int main()
{
const int N=100;
int x[N];
int n=0;
//cin.getline(x,N);报错,意思是这个指示只针对字符串,对于数字,我们需要换一种思路
while(cin>>x[n])//数组输入
{
n++;
if(cin.get()=='\n')
break;
}
int *p_s=x,*p_e=&x[1];//指针赋值
int start;
start=remove_samenum(p_s,p_e,n) ;
//输出
// cout<<start<<endl;
for(int i=0;i<start;i++)
{
cout<<x[i]<<'\t';
}
//cout<<strlen(x);
/* for(int j=0;j<n;j++)
{
cout<<x[j];//测试
}*/
//cout<<sizeof(x);对于整型数组,sizeof什么的均用不了
return 0;
}
2.请使用指针去掉字符串中间的全部空格。
比如:
输入 " abc d ef "
输出 " abcdef "
类似题目1,用双指针完成。
一个不用指针就完成的代码
/*
*Copyright (c)2014,烟台大学计算机与控制工程学院
*All rights reserved.
*文件名称:sentence.cpp
*作 者:单昕昕
*完成日期:2014年11月23日
*版 本 号:v1.0
*
*问题描述:去除字符数组中的空格。
*程序输出:去除空格后的字符数组。
*/
#include<iostream>
using namespace std;
int main()
{
char str1[50]="Attack on titan";
int i,j;
i=j=0;
while(str1[i]!='\0')
{
if(str1[i]!=' ') //遇到不是空格才复制
{
str1[j]=str1[i];
j++;
}
i++;
}
str1[j]='\0'; //不要忘记这个!!!
cout<<"去除空格后的字符串:"<<str1<<endl;
return 0;
}
用指针
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
//输入
const int N=100;
char x[N];
cin.getline(x,N);
//处理
int len=strlen(x);
char *px=x;
for(int i=0;i<len;i++)//对数组进行循环
{
if(x[i]!=' ')//非零的弄到
{
*px=x[i];
px++;
}
}
cout<<x;
}
3.请使用指针计算一个字符串的字符个数。
比如:
输入 "abcdefg"
输出 7
这个题目老✍
#include<iostream>
using namespace std;
int main()
{
const int N=100;
char x[N];
cin.getline(x,N);
char *pn=x;
int count=0;
while((*pn)!=0)
{
count++;
pn++;
}
cout<<count;
}
4.请使用指针完成两个字符串str1和str2的比较。比较规则如下:
若str1和str2第i位置字符相同,且str1和str2均未结尾,则继续循环;
若str1和str2第i位置字符相同,且str2未结尾、str1已经结尾,则判定为str1较小;
若str1和str2第i位置字符相同,且str1未结尾、str2已经结尾,则判定为str2较小;
若str1和str2第i位置字符相同,且str1和str2均已结尾,则str1与str2相等;
若str1和str2第i位置字符不同,且str1处的字符较大,则判定为str2较小;
若str1和str2第i位置字符不同,且str2处的字符较大,则判定为str1较小。
比如:
输入 "abcde" "abd"
输出 "abcde"较小
#include<iostream>
using namespace std;
int main()
{
//输入
const int N=100;
char x1[N],x2[N];
cout<<"请输入字符串1"<<endl;
cin.getline(x1,N);
cout<<"请输入字符串2"<<endl;
cin.getline(x2,N);
char *p1=x1,*p2=x2;
//比较
while(*p1!=0&&*p2!=0)
{
if(*p1>*p2)//同长度谁大谁胜出
{
cout<<"字符串1大";
break;
//return 0;
}
else if(*p1<*p2)
{
cout<<"字符串2大";
break;
//return 0;
}
else {
p1++;p2++;
}
}
//不同长度,对于最后一位均相同,谁长谁胜出
if(*p1!=0&&*p2==0)
{
cout<<"字符串1大";
}
else if(*p1==0&&*p2!=0)
{
cout<<"字符串2大";
}
else if(*p1==0&&*p2==0)//长度相同,而且每位都一样,那么就相等
{
cout<<"一样大";
}
return 0;
}
补充用string写的代码。U1S1,string真香
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str1,str2;
cout<<"请输入字符串1:";
getline(cin,str1);
cout<<"请输入字符串2:";
getline(cin,str2);
int k=str1.compare(str2);
switch (k)
{
case 1:cout<<"字符串1大";break;
case -1:cout<<"字符串2大";break;
case 0:cout<<"一样大";break;
}
return 0;
}