#include
using namespacestd;void func(int *p, int n, intk);voidmain()
{int a[]={1,2,3,4,5};inti;
func(a,5,2);for(i=0;i<5;i++)
cout<
cout<
}void func(int *p ,int n, intk)
{inttemp;inti;
k=k%n;//n是总长度,k是移位位数,实际移位k%n
if(k>=0)//右移
{while(k)
{
temp=p[n-1];for(i=n-1;i>0;i--)
p[i]=p[i-1];
p[0]=temp;
k--;//临时数组存放最后一个数据,然后依次后移,k--;
}
}else if(k<0)
{
k=k*(-1);//左移
while(k)
{
temp=p[0];for(i=1;i
p[i-1]=p[i];
p[n-1]=temp;
k--;//临时数组存放第一个数据
}
}
}
View Code
7、数组循环移位
10.将字符串中的所有字母都替换成该字母的下一个字母
#include
using namespacestd;
#include#include#include
void func(char *p);voidmain()
{char str1[20];
printf("enter:");
gets(str1);
func(str1);
puts(str1);
}void func(char *p)
{charch;while(*p)
{ ch=*p;//临时字符//判断是否是字符,且不是z或者Z
if(isalpha(*p)&&(*p!='z')&&(*p!='Z'))、、*p=ch+1;else if(*p='z')*p='a';else if(*p='Z')*p='A';
p++;
}
}
回文判断
#include
using namespacestd;bool func(intm);voidmain()
{intm;
cout<
cin>>m;
cout<
}bool func(intm)
{int i,n=0;
i=m;while(i)
{
n=n*10+i%10;
i/=10;
}//就是把原数的位从低到高取出来,组成新数,两个数搞出来看看是否相等。。
if(m==n)return true;return false;
}
View Code
字符串转成整数
#include #include#include
using namespacestd;int func(chara[]);voidmain()
{char a[]={'1','2','3','4','\0'};
cout<
}int func(chara[])
{int i=0;int sum=0;while(a[i]!='\0')
{
sum=sum*10+(a[i]-'0');
i++;
}returnsum;
}
View Code
下面就说说为什么字符减'0'可以到相应的整数。现在比如我们要字符‘1’转换成数字1,就这么一个变化,我们看到了大家注意了字符型常量用''括起来的原因是,它们在计算机中都以各自的ASCII表示。而‘1’的对应编码是49的二进制码,但是我们的数字1,就等于1呀,所以为了由原来的‘1’实际上就是49的二进制变成现在的1对应的二进制1,只好用49-48=1了。但是在ASCII码里‘0’对应的刚好是48的二进制码,所以我们转换的时候只需要‘1’-‘0’=1;就可以了。而数字的ASCII码是按顺序规定的。所以其它字符要转换成数字都可以用减‘0’来表示。比如‘2’的ASCII是50,而我们要得到数字2,于是用‘2’-48=2了。看来当我们知道数据在计算机中的存储规则的时候,问题就迎刃而解了。
大小写字母的转换:先看ASCII码:a~z是97~122的二进制,而A~Z是65~90的二进制编码,于是我们就得出:大写字母=小写字母-32 ;这个公式了。当然这里的32我也可以这么写‘Z’=‘z’-'空格'。因为空格的ASCII码是32对应的二进制编码。
#include #include
int main(void)
{floatn;char *str = "12345.67";
n=atoi(str);
printf("string = %s integer = %f\n", str, n);return 0;
}
View Code
#include #include
intmain()
{char a[] = "-100";char b[] = "123";intc ;
c= atoi( a ) +atoi( b ) ;
printf("c = %d\n", c) ;return 0;
}
View Code
int atoi(const char *nptr);
参数nptr字符串,如果第一个非空格字符存在,是数字或者正负号则开始做类型转换,之后检测到非数字(包括结束符 \0) 字符时停止转换,返回整型数。否则,返回零,头文件: #include
13.求一个二维数组每列的最小值
#include
using namespacestd;void fun(int input[3][4], const int m, const int n, int output[4]);intmain()
{int input[3][4] = { {21,48,86,92},
{10,23,12,69},
{46,78,49,13}};int output[4];
fun(input,3, 4, output);
cout<
{for(int j=0; j<4; j++)
{
cout<
}
cout<
}
cout<
{
cout<
}
cout<
}void fun(int input[3][4], const int m, const int n, int output[4])
{int i = 0;int j = 0;for (i=0; i
{
output[i]= input[0][i];//暂存每一列的第一行元素
for (j=0; j
{if (output[i] >input[j][i])
{
output[i]= input[j][i];//依次比较得到每一列的最小值
}
}
}
}
View Code
14.连续字符统计(如AABCCCD:A2B1C3D1)
#include #include#include
using namespacestd;void func(char str[],intlen);voidmain()
{char str[20];intlen;
cout<
gets(str);
len=strlen(str);
func(str,len);
}void func(char str[], intlen)
{int count=1;inti;for(i=0;i
{if(str[i]==str[i+1])
count++;//利用数组比较,也可用指针
else{
cout<
count=1;//碰到新元素。回归为0;
}
}
cout<
}
View Code
15.找出一个字符串中是否包含相同的子字符串(要求子串长度大于等于2)
包含文件:string.h
函数名: strstr
函数原型:extern char *strstr(char *str1, char *str2);功能:从字符串str1中查找是否有字符串str2,如果有,从str1中的str2位置起,返回str1中str2起始位置的指针,如果没有,返回null。
返回值:返回该位置的指针,如找不到,返回空指针。
例子:
char str[]="1234 xyz";char* str1=strstr(str,"34");cout<
原型:char * strncpy(char *dest, char *src,size_tnum);功能:(c/c++)复制src中的内容(字符,数字、汉字....)到dest,复制多少由num的值决定,返回指向dest的指针。如果遇到null字符('\0'),且还没有到num个字符时,就用(num - n)(n是遇到null字符前已经有的非null字符个数)个null字符附加到destination。注意:并不是添加到destination的最后,而是紧跟着由source中复制而来的字符后面。下面举例说明[1]:
char des[] = "Hello,i am!";char source[] = "abc\0def";strncpy(des,source,5);此时,des区域是这样的:a,b,c,\0,\0,逗号,i,空格,a,m,!
注意:\0,\0并不是添加在!的后面。
没看懂
#include #include
using namespacestd;int fun(char* str, intn)
{char *temp = new char[n+2];char *str2 =str;int sum = 0;int outsum = 0;char*t;for(int i = 0; i < n; i++)
{for(int j = 2; j <= n-i; j++)
{
sum= 0;
str2= str;//赋
memset(temp,0,(n+2)*sizeof(char));//初始化0
strncpy(temp, str+i, j);//
while((t = strstr(str2,temp)) !=NULL)
{
sum++;
str2= t+j;
}if( sum >outsum)
{
outsum=sum;
}
}
}if(outsum == 1)return 0;returnoutsum;
}intmain()
{char strstr[1000];
memset(strstr,0,sizeof(strstr));char *s =strstr;
cin>>s;int n =strlen(s);intoutsum;
outsum=fun(s,n);
cout<< outsum <
system("pause");return 0;
}
View Code
16.已知:yi er san si wu liu qi ba jiu 分别对应123456789,对一段只含有这几种字符的字符串进行转换,转换成相应的数字
#include #include
using namespacestd;char* sss[9] = {"yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};int fun(char*str)
{inti;int sum = 0;int d = 0;
i= 0;intj;while(str[i] != '\0')
{if(str[i] == 'y' || str[i] == 'e'|| str[i] == 'w' || str[i] == 'q' || str[i] == 'b')
d= 2;else if(str[i] == 'l' || str[i] == 'j')
d= 3;else if(str[i] == 's')
{if(str[i+1] == 'a')
d= 3;else d = 2;
}//确定碰到字符时移动的距离d
for(int k = 0; k < 9; k++)
{if(strncmp(str+i,sss[k],d) == 0)//匹配成功
j = k+1;//实际数字
sum = 10*sum +j;
}
i= i+d;//每比较一个字符串移动的距离//不考虑字符串不匹配的情形
}returnsum;
}intmain()
{char strstr[1000];
memset(strstr,0,sizeof(strstr));char *s =strstr;
cin>>s;intoutsum;
outsum=fun(s);
cout<< outsum <
system("pause");return 0;
}
17.删除字符串中字符个数最少的字符串
暂时没看懂
#include
#include
using namespace std;char* fun(char* str,int n)
{
int i=0; int j=0; int hash[256] = {0}; char *result = new char[n+1]; memset(result,0,(n+1)*sizeof(char));//开辟字符指针并初始化
for( i = 0;i < n; i++)
{
hash[str[i]]++;}
//每个字符的个数。用哈希值表示
int min= 0x7fffffff;for( i= 0;i < 256; i++)
{
if(hash[i] < min && hash[i] != 0)
min= hash[i];}
for(i= 0,j = 0;i < n; i++)
{
if(hash[str[i]] !=min)
{
result[j++] = str[i];}
}
return result;}
int main()
{
char strstr[1000]; memset(strstr,0,sizeof(strstr)); char *s = strstr; cin >> s;char *re= NULL;re= fun(s,strlen(s));cout << re << endl; system("pause"); return 0;}
View Code
C:
#include"stdio.h"//这个头文件包含gets()函数
int main(void)
{
char str1[5];gets(str1);printf("%s\n", str1);return 0;}
C++:
#include
using namespace std;int main()
{
char str[100];gets(str);cout<
gets()函数用来从标准输入设备(键盘)读取字符串直到换行符结束,但换行符会被丢弃,然后在末尾添加'\0'字符。其调用格式为:
gets(s);其中s为字符串变量(字符串数组名或字符串指针)。
gets(s)函数与scanf("%s",s)相似,但不完全相同,使用scanf("%s",s) 函数输入字符串时存在一个问题,就是如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理,但gets()函数将接收输入的整个字符串直到遇到换行为止。
18.比较两个字符串,相等返回1,不等返回不等的位置
#include
#include
#include
using namespace std;void func(const char *str1,const char*str2);
void main()
{
char *str1,*str2; str1=new char[256]; str2=new char[256]; memset(str1,0,256*sizeof(char)); memset(str2,0,256*sizeof(char)); cout<
//从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读//取串的内容,读取的换行符被转换为null值,并由此来结束字符串。
func(str1,str2);}
void func(const char *str1,const char*str2)
{
int m,n; int k=0; int l,j; int i=0; m=strlen(str1); n=strlen(str2); while(*str1!='\0')
{
if(*str1==*str2)//||(abs(*str1-*str2)=='a'-'A'))
{str1++; str2++; k++;//k是位置。
}
else break;}
if(k==m&&n==m)//完全相等则为1
cout<
cout<
View Code
19.比较两个字符串是否相等,大小写也算相等
#include
#include
#include
using namespace std;bool func(const char *str1,const char*str2);
void main()
{
char *str1,*str2; bool m; str1=new char[256]; str2=new char[256]; memset(str1,0,256*sizeof(char)); memset(str2,0,256*sizeof(char)); cout<
bool func(const char *str1,const char*str2)
{
int m,n; int k=0; m=strlen(str1); n=strlen(str2); if(m!=n)
return false;else
{
while(*str1!='\0')
{
if(*str1==*str2||(abs(*str1-*str2)=='a'-'A'))//大小写的处理,相减为32
{str1++; str2++; k++;}
else break;}
}
cout<
return true;else
return false;}
View Code
20.将一句英文的每个单词的第一个字母大写
#include
#include
#include
using namespace std;void func(char *ptr);
void main()
{
char *ptr;
ptr =new char[256];
memset(ptr, 0, sizeof(ptr));
cout<
gets(ptr);
func(ptr); cout<
void func(char *ptr)
{
char *ptr1;
ptr1=new char[256]; memset(ptr1, 0, sizeof(ptr1));
ptr1 = ptr;if(*ptr1
*ptr1=*ptr1;
else
*ptr1 -= 32;
while(*ptr1!='\0')
{
if(*ptr1==' ')
{
if(*(ptr1+1)
*(ptr1+1)=*(ptr1+1);
else
*(ptr1+1) -= 32;
}
ptr1++;
//空格后的第一个字符大写,减去32.
}
}
View Code
swap(a,b)值交换的四种方法:
[cpp]
void swap(int &a, int &b)
{
//方法一:
int tmp = 0;
tmp = b;
b = a;
a = tmp;
//方法二:
//a = a+b;
//b = a-b;
//a = a -b;
//方法三:
//a ^= b ^= a ^= b;
//方法四:
//a = a+b-(b=a);
}
int main(void)
{
int a = 3;
int b = 4;
printf("before swap: a = %d, b = %d\n", a, b);
swap(a, b);
printf("after swap: a = %d, b = %d\n", a, b);
return 0;
}
结果:
before swap: a = 3, b = 4
after swap: a = 4, b = 3
关于传参方式有三种:值传参、地址传参、引用传参(C++方法),上面使用的是第三种,引用传参,因为这种传参方式使得swap里面实现更为直观。当然,也可以使用第二种传参方式地址传参,不过,值传参是不行的哦。