[关闭]
@pandaoxi2022 2022-08-02T20:33:18.000000Z 字数 13298 阅读 567

字符数组

字符数组

1、什么是字符数组

用来存放字符的数组就是字符数组,字符数组的每一个元素用来存放一个字符。

str[]={‘h’,’e’,’l’,’l’,’o’};

str[0]=’h’;str[1]=’e’;str[2]=’l’,str[3]=’l’,str[4]=’o’;

2、字符数组的初始化

如果在定义数组时不进行数组初始化,则数组中各元素的值是不可预料的,如果花括号的内容大于数组长度,则会出现语法错误,如果小于,后面的元素就自动被定义为空字符(即\0)。

char a[6]={‘w’,’o’,’r’,’l’,’d’};//长度为6

char str[]={‘w’,’o’,’r’,’l’,’d’};//长度为5,系统自动定义,不需要人工的去数。

这两个字符数组是不等价的,一定要注意区别

3、字符串结束标志

C语言中是将字符串当作字符数组来表示的,人们往往关心字符串的实际长度而非字符数组的长度,若在一个字符数组中前面9个元素 都不是空字符,第十个元素是空字符(\0),那就说明这个数组的有效长度是9。c系统会在存储字符串的时候加一个\0。

说明:‘\0’是ASCII码为0的字符,是一个不可显示的字符,是一个空操作符,什么也不做,只是一个结束标志,所以我们常使用字符串常量对字符数组进行初始化,例如:

char str[]={“happy ending”}

也可以直接省略花括号,写为:

char str=”happy ending”

注意:字符数组并不会要求最后一个数组元素为’\0’,甚至可以不包含\0。

4、字符数组不能直接比较

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main() {
  4. char s1[10] = "hello";
  5. char s2[10] = "hello";
  6. if(s1 == s2) cout<<"相同";
  7. else cout<<"不相同";
  8. char s3[10];
  9. //s3 = s1;赋值错误
  10. cout<<s1<<endl;
  11. cout<<s2<<endl;
  12. if(strcmp(s1,s2)>0){
  13. cout<<s1<<"字典码大于"<<s2<<endl;
  14. }else if(strcmp(s1,s2)<0){
  15. cout<<s1<<"字典码小于"<<s2<<endl;
  16. }else{
  17. cout<<s1<<"字典码等于"<<s2<<endl;
  18. }
  19. int a[10]={1,2,3,4,5};
  20. cout<<a<<endl;
  21. cout<<&a<<endl;
  22. cout<<&a[0]<<endl;
  23. return 0;
  24. }
  1. 5、字符数组相关函数
  2. strlen(s) 求字符串长度
  3. strcmp(s1,s2) 字符串比较,按照字典码顺序比较大小,如果s1大返回整数,相等0,如果s2大返回负数
  4. "123"<"3"
  5. "hello" < "hi"
  6. "good"<"goodstudent"
  7. strncmp(s1,s2,n) s1,s2的前n个数比较
  8. strcat(s1,s2) s2连接到s1后面
  9. strncat(s1,s2,n)将s2的前n个字符连接到s1的后面
  10. strcpy(s1,s2)将s2的内容拷贝给s1,替换s1的内容
  11. strncpy(s1,s2,n)将s2的前n个字符拷贝给s1,替换s1的内容
  12. 字符处理相关函数
  13. int isalnum(int c):检查字符是否为数字或字母;(0~9,a~z,A~Z)
  14. int isalpha(int c):检查字符是否为字母;(a~z, A~Z)
  15. int iscntrl(int c):检查字符是否为控制字符;(八进制000~037以及177的字符)
  16. int isdigit(int c):检查字符是否为十进制数字;(0~9)
  17. int isgraph(int c):检查字符是否为图形表示,依赖于使用语言的环境;0~9,a~z,A~Z,以及标点符号)
  18. int islower(int c):检查字符是否为小写的字母;(a~z)
  19. int isprint(int c):检查字符是否为可打印的;(数字、字母、标点符号、空白字符)
  20. int ispunct(int c):检查字符是否为标点符号;(! # $ % & ’ ( ) * + , - . / : ; < = > ? @ [ ] ^ _ ` { | } ~等)
  21. int isspace(int c):检查字符是否为空白字符;(TAB、换行、垂直TAB、换页、回车、空格)
  22. int isupper(int c):检查字符是否为大写字母;(A~Z)
  23. int isxdigit(int c):检查字符是否为十六进制数字;(0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f)
  24. int tolower(int c):转化字符为小写字母;
  25. int toupper(int c):转化字符为大写字母;
  26. ```c++
  27. <div class="md-section-divider"></div>
  28. #include<bits/stdc++.h>
  29. using namespace std;
  30. int main(){
  31. char a[10];
  32. a[0] = 'h';
  33. a[1] = 'i';
  34. a[2] = '\0';
  35. //1.由于字符数组以\0结尾,所以可以直接cout,整数数组不能直接输入输出
  36. cout<<a<<endl;
  37. //sizeof():计算变量占用的字节数
  38. //srlen():计算字符数组在\0之前的字符数量(string length)
  39. cout<<sizeof(a)<<" "<<strlen(a)<<endl;
  40. //2.如果采用{}的形式赋值,且个数不足数组长度,则剩余的值默认补充'\0'
  41. char b[10] = {'h','i','\0'};
  42. cout<<sizeof(b)<<" "<<strlen(b)<<endl;
  43. //3.由内容确定字符数组长度
  44. char c[]= {'h','i','\0'};
  45. cout<<sizeof(c)<<" "<<strlen(c)<<endl;
  46. //4.直接使用字符串赋值 ,默认添加一个'\0'
  47. char d[]="hi";
  48. cout<<sizeof(d)<<" "<<strlen(d)<<endl;
  49. //例子
  50. char e[] = {'h','i','\0','t','o','m'};
  51. cout<<sizeof(e)<<" "<<strlen(e)<<endl;
  52. return 0;
  53. }
  54. <div class="md-section-divider"></div>

}

  1. <div class="md-section-divider"></div>

include

using namespace std;

int main(){

//输入输出字符串的方法



char s[100];



//cin以空格作为结束

// cin>>s;

字符串输入: 



//string x; scanf("%s",x);//不读取空格,不读取回车 



//gets(x);//读取空格,读取回车 



//cin>>x;//不读取空格, 不读取回车



//getline(cin,x);//读取空格,不读取回车 



//字符输入



//char ch;



//cin>>x;//不读取回车



//scanf("%c",&ch);//读取回车








//gets以回车为结束 



gets(s);



cout<<s<<endl;



//遍历并输出 



for(int i = 0; i < strlen(s); i++){



    cout<<s[i]<<endl; 



} 



for(int i = 0; i != '\0'; i++){



    cout<<s[i]<<endl; 



} 








return 0;

}

  1. }
  2. <div class="md-section-divider"></div>
  1. /*1097 - 【入门】统计字符的个数
  2. 题目描述
  3. 从键盘中任意输入一串字符,直至输入"#"字符代表结束。请编程统计输入的字符中的大写字母,小写字母和数字字符的个数分别是多少?
  4. 输入
  5. 输入只有一行,包括一串字符。(长度小于20,且没有空格)
  6. 输出
  7. 输出只有一行,包括3个整数。分别代表大写字符,小写字符和数字字符的个数。
  8. 样例
  9. 输入复制
  10. daDSALDdcada3240#
  11. 输出复制
  12. 5 7 4
  13. */
  14. <div class="md-section-divider"></div>
  15. #include<bits/stdc++.h>
  16. using namespace std;
  17. int main(){
  18. char s[30];
  19. int d=0,x=0,n=0;
  20. //cin以空格作为结束
  21. //gets以回车为结束
  22. gets(s);
  23. cout<<s<<endl;
  24. //遍历
  25. for(int i = 0; i < strlen(s); i++){
  26. if(s[i]>='A' && s[i]<='Z'){
  27. d++;
  28. }else if(s[i]>='a' && s[i]<='z'){
  29. x++;
  30. }else if(s[i]>='0' && s[i]<='9'){
  31. n++;
  32. }
  33. }
  34. cout<<d<<" "<<x<<" "<<n;
  35. return 0;
  36. }
  37. <div class="md-section-divider"></div>

}

  1. <div class="md-section-divider"></div>

/*1115 - 【入门】数字和

题目描述

输入一个很大的数,求各位上的数字和。

输入

一个很大的整数(不超过200位)

输出

一个整数

样例

输入复制

123

输出复制

6

6

*/

include

using namespace std;

int main(){

char a[210];



int s=0;



cin>>a;



//遍历



for(int i = 0; i < strlen(a); i++){



    //将字符转换为真实的数,‘0’的asc码为48



    s += a[i] - '0';         



} 



cout<<s;



return 0;

}

  1. }
  2. <div class="md-section-divider"></div>
  1. /*1116 - 【入门】调换位置
  2. 题目描述
  3. 将用逗号隔开的两个英语单词交换位置输出。
  4. 输入
  5. 一行以逗号隔开的两个英文单词。(字符串长度不超过100)
  6. 输出
  7. 将两个单词交换后输出的结果
  8. 样例
  9. 输入复制
  10. abc,de
  11. 输出复制
  12. de,abc
  13. */
  14. <div class="md-section-divider"></div>
  15. #include<bits/stdc++.h>
  16. using namespace std;
  17. int main(){
  18. char a[200],b[200];
  19. int s=0;
  20. gets(a);
  21. //遍历
  22. for(int i = 0; i < strlen(a); i++){
  23. //找到逗号位置,赋值给s
  24. if(a[i] == ','){
  25. s = i;
  26. }
  27. }
  28. int bp=0;
  29. for(int i = s+1; i < strlen(a); i++){
  30. //从逗号之后开始,复制所有字符串到新数组
  31. b[bp] = a[i];
  32. bp++;
  33. }
  34. //添加逗号
  35. b[bp] = ',';
  36. bp++;
  37. for(int i = 0; i < s; i++){
  38. //把逗号前面的内容复制过来
  39. b[bp] = a[i];
  40. bp++;
  41. }
  42. //添加结束‘\0’
  43. b[bp] = '\0';
  44. cout<<b;
  45. return 0;
  46. }
  47. <div class="md-section-divider"></div>

}

  1. <div class="md-section-divider"></div>

/*1098 - 【入门】判断是否构成回文

题目描述

输入一串字符,字符个数不超过100,且以"."结束。 判断它们是否构成回文。

输入

输入只有一行,包括一串字符。(测试数据不含空格)

输出

输出只有一行,TRUE 或者FALSE 。

样例

输入复制

12321.

输出复制

TRUE

*/

include

using namespace std;

int main(){

char a[200];



bool s=true;



gets(a);



//遍历



for(int i = 0; i < (strlen(a)-1)/2; i++){



    if(a[i] != a[strlen(a)-2-i]) {//如果有任何一个不等,则不是回文 



        s=false;



        break;//退出循环 



    }



} 



if(s) cout<<"TRUE";



else cout<<"FALSE";



return 0;

}

  1. }
  2. <div class="md-section-divider"></div>
  1. /*1177 - 【入门】统计字母出现次数
  2. 题目描述
  3. 输入一串小写字母(以"."为结束标志),统计出每个字母在该字符串中出现的次数(若某字母不出现,则不要输出,题目保证每个字母出现的次数<10)。
  4. 输入
  5. 输入只有一行,包括若干个字符。
  6. 输出
  7. 输出只有两行,第一行为出现的小写字母,第二行为字母的出现次数。
  8. 样例
  9. 输入复制
  10. abdceeef.
  11. 输出复制
  12. abcdef
  13. 111131
  14. */
  15. <div class="md-section-divider"></div>
  16. #include<bits/stdc++.h>
  17. using namespace std;
  18. int main(){
  19. char a[1000];
  20. int sum[200]={0};//存放每个字母出现的次数
  21. gets(a);
  22. //遍历
  23. for(int i = 0; i < strlen(a); i++){
  24. int c = a[i];//得到字母对应的asc码
  25. sum[c]++;
  26. }
  27. //输出那些字母出现过
  28. for(int i=97; i<97+25; i++){
  29. if(sum[i] !=0) cout<<(char)i;
  30. }
  31. cout<<endl;
  32. //输出字母的出现次数
  33. for(int i=97; i<97+25; i++){
  34. if(sum[i] !=0) cout<<sum[i];
  35. }
  36. return 0;
  37. }
  38. <div class="md-section-divider"></div>

}

  1. <div class="md-section-divider"></div>

/*1134 - 【基础】国王的魔镜

题目描述

国王有一个魔镜,可以把任何接触镜面的东西变成原来的两倍——

只是,因为是镜子嘛,增加的那部分是反的。

比如一条项链,我们用AB来表示,不同的字母表示不同颜色的珍珠。

如果把B端接触镜面的话,魔镜会把这条项链变为ABBA。

如果再用一端接触的话,则会变成ABBAABBA(假定国王只用项链的某一端接触魔镜)。

给定最终的项链,请编写程序输出国王没使用魔镜之前,最初的项链可能的最小长度。

输入

只有一个字符串,由大写英文字母组成,表示最终的项链。

输出

只有一个整数,表示国王没使用魔镜前,最初的项链可能的最小长度。

样例

输入复制

ABBAABBA

输出复制

2

2

*/

include

using namespace std;

bool f(char s[] ){

bool r=true;



    for(int i = 0; i < (strlen(s))/2; i++){



        if(s[i] != s[strlen(s)-1-i]) {//如果有任何一个不等,则不是回文 



            r=false;



            break;//退出循环 



        }



    } 



    return r;

}

int main(){

char a[1000];



gets(a);

// if(f(a)) cout<<1;

// else cout<<0;

while(f(a) && (strlen(a) % 2 == 0)){



    a[strlen(a)/2] = '\0';      



}



cout << strlen(a);



return 0;

}

  1. }
  2. <div class="md-section-divider"></div>
  1. /*
  2. 1100 - 【入门】词组缩写
  3. 题目描述
  4. 定义:一个词组中每个单词的首字母的大写组合称为该词组的缩写。 比如,C语言里常用的EOF就是end of file的缩写。
  5. 输入
  6. 测试数据占一行,有一个词组,每个词组由一个或多个单词组成;每组的单词个数不超过10个,每个单词有一个或多个大写或小写字母组成; 单词长度不超过10,由一个或多个空格分隔这些单词。
  7. 输出
  8. 输出规定的缩写
  9. 样例
  10. 输入复制
  11. end of file
  12. 输出复制
  13. EOF
  14. */
  15. <div class="md-section-divider"></div>
  16. #include<bits/stdc++.h>
  17. using namespace std;
  18. char up(char c){
  19. if(c>='a' && c<='z'){
  20. c= c-('a'-'A');
  21. }
  22. }
  23. }
  24. int main() {
  25. /*
  26. 第一步:获得每个单词的首字母
  27. 空格后面的字母是首字母。当前不是空格,上一个是空格
  28. 第一个字符不是空格就是首字母
  29. 第二步:判断如果是小写,转换为大写输出,否则直接输出
  30. */
  31. char s[100];
  32. gets(s);
  33. for(int i = 0;i<strlen(s);i++){
  34. if(i==0 && s[i]!=' '){
  35. cout<<up(s[i]);
  36. }else if((i!=0) &&(s[i]!=' ' && s[i-1]==' ')){
  37. cout<<up(s[i]);
  38. }
  39. }
  40. return 0;
  41. }
  42. <div class="md-section-divider"></div>

}

  1. <div class="md-section-divider"></div>

/*

1103 - 【基础】字符串压缩

题目描述

输入字符串,输出压缩后的字符串。压缩的方法是把连续的相同字母压缩为"长度+字母"的形式,在本题中,单个的字母不需要压缩。

输入

一行,一个字符串,只包含小写英文字母,长度不超过255。

输出

样例

输入复制

aaabbbbbx

输出复制

3a5bx

*/

include

using namespace std;

int main() {

/*



统计连续相同字符的个数



数数法:准备个计数变量。开始数,如果是相等的话,计数器加一,如果不相等,则计数器清零 



*/ 



char s[100];



int sum=0; 



gets(s);



for(int i = 0;i<strlen(s);i++){



    sum++;//先加上,如果不等,则清空,不影响结果。如果不加则需要在else中自增 



    if(s[i]!=s[i+1]){



        if(sum>1) cout<<sum;



        cout<<s[i];



        sum=0;



    }



}



return 0;

}

  1. }
  2. <div class="md-section-divider"></div>
  1. /*
  2. 1107 - 【基础】求英文句子中的最长单词
  3. 题目描述
  4. 一个英文句子(长度不超过255),只含有字母和空格,输出最长的一个单词。如有多个长度相同的单词,则输出最前面的一个。
  5. 输入
  6. 一个字符串。
  7. 输出
  8. 一个字符串。
  9. 样例
  10. 输入复制
  11. in which four coins
  12. 输出复制
  13. which
  14. */
  15. <div class="md-section-divider"></div>
  16. #include<bits/stdc++.h>
  17. using namespace std;
  18. int main(){
  19. /*
  20. 1.分解并输出每个单词
  21. 找到字符串结束位置,当前字符不是空格,下一个字符是空格或者'\0'
  22. 2.找到最长单词
  23. */
  24. char s[300],w[100],r[100]={'\0'};//字符数组默认填充'\0'
  25. int k=0;
  26. gets(s);
  27. for(int i=0;i<strlen(s);i++){
  28. if(s[i]!=' '){
  29. w[k] = s[i];
  30. k++;
  31. if(s[i+1]==' ' ||s[i+1]=='\0'){
  32. w[k]='\0';
  33. if(strlen(w) > strlen(r)){
  34. strcpy(r,w);
  35. }
  36. //清空w数组
  37. k=0;
  38. }
  39. }
  40. }
  41. cout<<r;
  42. return 0;
  43. }
  44. <div class="md-section-divider"></div>

}

  1. <div class="md-section-divider"></div>

/*

1012 - 【基础】我是第几个单词

题目描述

输入一个英文句子,例如:“This is a Book.",可以看到句子是以“.”来作为结束符号的,并且单词之间以一个空格来分隔。接着再输入一个单词A,请找出首次在句子中出现的与A相同的单词,是句子中的第几个单词,若不存在,则输出该句子中单词字符的总个数。 例如对上句子而言,若输入单词“is”,则应输出:2 若输入单词“isa”,则应输出:11

输入

第一行为以‘.’结束的一个词组(仅由若干个单词组成,单词间由一空格隔开,除单词和最后的“.”以外,不含其它字符)

第二行是一个单词(不含空格)

输出

一个整数

样例

输入复制

This is a Book.

Book

输出复制

4

4

*/

include

using namespace std;

int main(){

/*



1.分解并输出每个单词,并且统计每个是第几个 



2.判断每个单词是不是要找的,如果是,输出第几个



3.如果没有找到,则输出字符总数 



*/ 



char s[300],w[100],f[100];//s总单词,f为要找的单词 



int k=0,count=0;//w当前位置 



bool flag=false;



gets(s);



gets(f);



for(int i=0;i<strlen(s);i++){



    //如果当前字符不是空格,也不是.则说明是单词的一部分 



    if(s[i]!=' ' && s[i]!='.'){



        w[k] = s[i];



        k++;



        //判断连续的单词是否结束 



        if(s[i+1]==' ' || s[i+1]=='.'){



            w[k]='\0';



            count++; 



            if(strcmp(w,f)==0){



                cout<<count;



                flag = true;



                break;



            }



            //清空w数组



            k=0;



        }



    }



}



if(!flag) cout<<count;



return 0;

}

  1. }
  2. <div class="md-section-divider"></div>
  1. /*
  2. 1130 - 【入门】简单a+b
  3. 题目描述
  4. 张晓菲同学做了简单的ab求和的问题。但是,如果要求输入的情况不是a和b,而是整个加法表达式呢? 请想办法,计算加法表达式的结果。
  5. 输入
  6. 输入一个加法表达式,如1+2=,或者23+58=。(注意:做加法的2个整数都在0~109的范围内)
  7. 输出
  8. 计算出输入表达式的正确结果
  9. 样例
  10. 输入复制
  11. 1+2=
  12. 输出复制
  13. 3
  14. 3
  15. */
  16. <div class="md-section-divider"></div>
  17. #include<bits/stdc++.h>
  18. using namespace std;
  19. int convert(char a[]){
  20. int n=0,pow=1;//pow代表乘以的位数乘方计算的值
  21. for(int i=strlen(a)-1;i>=0;i--){
  22. n += (a[i] - '0') * pow;
  23. pow*=10;
  24. }
  25. return n;
  26. }
  27. }
  28. int main(){
  29. /*
  30. 1.分解并输出每个整数
  31. 2.将字符数组存储的整数转换为实际的整数
  32. 3.求和
  33. */
  34. char s[300],n1[100]={'\0'},n2[100]={'\0'};
  35. bool flag=false;
  36. gets(s);
  37. int i=0;
  38. while(s[i]!='+'){
  39. n1[i] = s[i];
  40. i++;
  41. }
  42. i++;
  43. int p = i;
  44. while(s[i]!='='){
  45. n2[i-p] = s[i];
  46. i++;
  47. }
  48. //cout<<n1<<" "<<n2;
  49. cout<<convert(n1)+convert(n2);
  50. return 0;
  51. }
  52. <div class="md-section-divider"></div>

作业:

}

  1. 作业:
  2. <div class="md-section-divider"></div>

/*

1106 - 【入门】统计单词个数

题目描述

输入一行字符串(字符串长度≤100),包含若干个单词,约定相邻的两个单词用空格隔开(一个或多个空格),编程统计单词的个数。

输入

一行空格隔开的若干个单词。

输出

单词个数

样例

输入复制

Hello World

输出复制

2

2

*/

include

using namespace std;

int main(){

/*








*/ 



char s[300];



int n=0;



gets(s);



for(int i=0;i<strlen(s);i++){



    if(s[i]!=' '&&(s[i+1]==' ' ||s[i+1]=='\0')){



        n++;



    }



}



cout<<n;



return 0;

}

  1. }
  2. <div class="md-section-divider"></div>
  1. /*
  2. 1111 - 【基础】找最长单词
  3. 题目描述
  4. 编写程序,根据给出的一个结束于'.'的字符字串,找出其中最长的含有字母'a'的子串。
  5. 输入
  6. 一行,为一个字符字串,结束于句点'.'。字串中的子串由一个或几个空格隔开。
  7. 输出
  8. 一行。显示找出的最长的含有字母'a'的子串。如果有多个这样的子串,只显示其中的第一个;若没有含字母'a'的子串,则显示'NO'。
  9. 样例
  10. 输入复制
  11. Her name is Lilan and she is a happy student.
  12. 输出复制
  13. Lilan
  14. */
  15. <div class="md-section-divider"></div>
  16. #include<bits/stdc++.h>
  17. using namespace std;
  18. int main(){
  19. /*
  20. 1.分解并输出每个单词
  21. 找到字符串结束位置,当前字符不是空格,下一个字符是空格或者'.'
  22. 2.找到最长单词
  23. */
  24. char s[1000],w[100],r[100]={'\0'};//字符数组默认填充'\0'
  25. int k=0;
  26. bool a=false;
  27. gets(s);
  28. for(int i=0;i<strlen(s);i++){
  29. if(s[i]!=' '){
  30. if(!a && s[i] == 'a'){
  31. a=true;
  32. }
  33. w[k] = s[i];
  34. k++;
  35. if(s[i+1]==' ' || s[i+1]=='.'){
  36. w[k]='\0';
  37. if((strlen(w) > strlen(r) ) && a){
  38. //cout<<w<<endl;
  39. strcpy(r,w);
  40. }
  41. //清空w数组
  42. k=0;
  43. a=false;
  44. }
  45. }
  46. }
  47. if(strlen(r)>1){
  48. cout<<r;
  49. }else{
  50. cout<<"NO";
  51. }
  52. return 0;
  53. }
  54. <div class="md-section-divider"></div>

}

  1. <div class="md-section-divider"></div>

/*

1129 - 【入门】简单a*b

题目描述

按照a*b = 的格式输入算式,通过计算输出a*b的结果。

输入

输入中包括一个表达式,如:a*b=,a和b都是int类型的正整数。

输出

结果只有一个正整数,整数在long long范围内。

样例

输入复制

100*200=

输出复制

20000

*/

include

using namespace std;

int convert(char a[]){

int n=0,pow=1;//pow代表乘以的位数乘方计算的值 



for(int i=strlen(a)-1;i>=0;i--){



    n += (a[i] - '0') * pow;



    pow*=10;



}



return n;

}

}

int main(){

/*



1.分解并输出每个整数 



2.将字符数组存储的整数转换为实际的整数 



3.求和



*/ 



char s[300],n1[100]={'\0'},n2[100]={'\0'};



bool flag=false;



gets(s);



int i=0;



while(s[i]!='*'){



    n1[i] = s[i];



    i++;



}   



i++;



int p = i;



while(s[i]!='='){



    n2[i-p] = s[i];



    i++;



}



//cout<<n1<<" "<<n2;



cout<<(long long)convert(n1)*convert(n2);



return 0;

}

  1. }
  2. <div class="md-section-divider"></div>
  1. /*
  2. 1408 - 【入门】合法的变量名?
  3. 题目描述
  4. James在一节C++课程上,准备为自己的程序定义变量名称。老师告诉James,一个合法的变量名应该满足如下的三个条件:
  5. 1、只能由字母(大写或者小写)、数字及下划线(_)组成
  6. 2、不能以数字开头
  7. 3、不能是C++中有特殊含义的单词,由于James是C++的初学者,只学过int、double、cout、cin这四个有特殊含义的单词,因此James只要避开这几个单词就可以。
  8. 请你编程帮助James判断他定义的变量名是否合法。
  9. 下表中列举了一些合法的变量名和非法的变量名的案例供你参考。
  10. 合法变量名案例
  11. x
  12. sum
  13. sum_x
  14. sum2
  15. _sum
  16. x
  17. sum
  18. sum_x
  19. sum2
  20. _sum
  21. INT注意:这是合法的,因为在C++中是区分大小写的,int是表示整数类型,但INT不是);
  22. 非法变量名案例
  23. sum x:有空格(只能是字母、数字或下划线)
  24. 1x:以数字开头
  25. int:有特殊含义
  26. a#:有特殊字符“#”(只能是字母、数字、下划线)。
  27. 输入
  28. 一行,包含一个字符串,是James为变量起的名字,且长度不大于20。
  29. 输出
  30. 一行,如果是合法的C++变量名,则输出yes,否则输出no。
  31. 样例
  32. 输入复制
  33. sum
  34. 输出复制
  35. yes
  36. 输入复制
  37. sum x
  38. 输出复制
  39. no
  40. */
  41. <div class="md-section-divider"></div>
  42. #include<bits/stdc++.h>
  43. using namespace std;
  44. int main(){
  45. /*
  46. 1.分解并输出每个整数
  47. 2.将字符数组存储的整数转换为实际的整数
  48. 3.求和
  49. */
  50. char s[300];
  51. bool flag=true;
  52. gets(s);
  53. if(strcmp(s,"int")==0 || strcmp(s,"double")==0 ||strcmp(s,"cout")==0 ||strcmp(s,"cin")==0 ) {
  54. flag = false;
  55. }else if(isdigit(s[0])){
  56. flag = false;
  57. }else
  58. {
  59. for(int i=0;i<strlen(s);i++){
  60. if(!(isdigit(s[i]) || isalpha(s[i]) ||s[i]=='_')){
  61. flag = false;
  62. }
  63. }
  64. }
  65. if(flag){
  66. cout<<"yes";
  67. }else{
  68. cout<<"no";
  69. }
  70. return 0;
  71. }
  72. <div class="md-section-divider"></div>

}

  1. <div class="md-section-divider"></div>

/*

1117 - 【基础】重新排列

题目描述

现在有一个18位以内的自然数,你可以将组成这个数的各位数字重新排列,得到一个数值为最小的新数,但新数的位数保持不变。请编程打印出重新排列后的新数。(如:231重新排序后位数不变的最小数是123,而23105重新排序后位数不变的最小数是10235。)

输入

一个整数(位数 <= 18)

输出

重新排列后最小的新数

样例

输入复制

382

输出复制

238

*/

include

using namespace std;

int main(){

/*



1.分解并输出每个整数 



2.将字符数组存储的整数转换为实际的整数 



3.求和



*/ 



char s[100];



bool flag=true;



gets(s);



sort(s,s+strlen(s));



if(s[0] == '0'){



    int i = 1;



    while(s[i]=='0'){



        i++;



    }



    s[0] = s[i];



    s[i] = '0';



}



cout<<s;








return 0;

}

  1. }
  2. <div class="md-section-divider"></div>
  1. /*
  2. 1114 - 【基础】趣味填空
  3. 题目描述
  4. 小华的寒假作业上,有这样一个趣味填空题: 给出用等号连接的两个整数,如“1234=127”。
  5. 当然,现在这个等号是不成立的。题目让你在左边的整数中间某个位置插入一个加号,看有没有可能让等号成立。以上面的式子为例,如果写成123+4=127,这就可以了。 请你编写一个程序来解决它。
  6. 输入
  7. 只有那个不相等的式子。已知,等号两边的整数都不会超过2000000000。
  8. 输出
  9. 如果存在这样的方案,请输出那个正确的式子。如果不存在解决方案,请输出“Impossible!”(引号中的部分)。
  10. 样例
  11. 输入复制
  12. 1234=127
  13. 输出复制
  14. 123+4=127
  15. */
  16. <div class="md-section-divider"></div>
  17. #include<bits/stdc++.h>
  18. using namespace std;
  19. int convert(char a[]){
  20. int result=0,pow=1;
  21. for(int i=strlen(a)-1;i>=0;i--){
  22. result+=(a[i]-'0') * pow;
  23. pow*=10;
  24. }
  25. return result;
  26. }
  27. int main(){
  28. /*
  29. 1.字符串分解为两个数
  30. 2.将第一个字符串逐位分解成两个数(转整数函数),并求和判断
  31. 3.没有成功则输出 Impossible!
  32. */
  33. char s[100],n[100]={'\0'},r[100]={'\0'};
  34. bool flag =true;
  35. gets(s);
  36. int i=0;
  37. while(s[i]!='='){
  38. n[i]=s[i];
  39. i++;
  40. }
  41. i++;
  42. int p = i;
  43. while(s[i]!='\0'){
  44. r[i-p]=s[i];
  45. i++;
  46. }
  47. //cout<<n<<""<<r<<endl;
  48. //逐字分割字符串
  49. for(int i=0;i<strlen(n)-1;i++){
  50. char n1[100]={'\0'},n2[100]={'\0'};
  51. int j=0;
  52. while(j<=i){
  53. n1[j] = n[j];
  54. j++;
  55. }
  56. int pp = j;
  57. while(j<strlen(n)){
  58. n2[j-pp] = n[j];
  59. j++;
  60. }
  61. if(convert(n1)+convert(n2)==convert(r)){
  62. cout<<n1<<"+"<<n2<<"="<<r<<endl;
  63. flag = true;
  64. }
  65. }
  66. if(!flag){
  67. cout<<"Impossible!";
  68. }
  69. return 0;
  70. }
  71. <div class="md-section-divider"></div>

}

```

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注