字符串

    科技2022-07-13  117

    文章目录

    一、字符串的形式 二、字符串的输入输出 三、字符串函数 四、字符串的增、删、改、查。



    # 一、字符串的形式

    1." ";双引号之间的字符串(结尾自动添加’\0’)。

    代码如下(示例):

    string s="hello world";//定义 cout<<s;//输出

    2.以’\0’结尾的字符串数组。

    代码如下(示例):

    int n=11; char s[n]={"hello world"};//定义 //输出方式1:可以按照字符串的方式输出 cout<<s<<endl; //输出方式2:可以按照数组的方式输出 for(int i=0;i<n;i++) cout<<s[i]; cout<<endl;

    3.string(STL);

    代码如下(示例):

    二、字符串的输入输出

    1.scanf();遇见空格、换行输入结束。回车时自动添加‘\0’;在处理字符时,输入回车或者空格,这些字符会写入输入流中,保存在输入流中,下次如果需要输入字符时,没等输入时,会直接把这些字符读入。

    代码如下(示例):

    scanf("%d",a); scanf("%c",b); //此时的输入就会造成错误,当你输入数字以回车结束后,回车符会保存在输入流中。 //后面再需要输入时,会直接把输入流中的回车符赋值给b //解决方法 //1. scanf("%d",a); scanf(" %c",b); //输入字符时,在%c前面加上空格即可把输入流中的字符吃掉 //2. scanf("%d",a); getchar();//可将回车符吃掉. scanf("%c",b);

    如果我们要输入带空格的字符串此时就需要用别的办法了,下面有两种办法。

    <1>(避免数组越界)cin.getline(a,sizeof(a));//遇空格不结束输入,回车不写入a,同时,回车也不写入输入流中;输入数组的长度应该为a.size-1。(此输入办法不常用)

    <2>(常用方法)gets(a);//读入一行,结尾自动添加’\0’;回车不写入a,同时,回车也不写入输入流中,但是此函数可能导致数组越界。

    2.scanf("%s",a); 和 printf("%s",a);

    用scanf();需注意最后一位自动添加’\0’造成的数组越界问题。

    代码如下(示例):

    char a[5]; scanf("%s",a); //输入1 2 3 4 5会造成数组越界,最后自动添加的'\0'没有存储位置。 char a[5]={"abcd"}; printf("%s\n",a);//直接按字符串输出

    TK 1042: 元音字母转换

    #include<stdio.h> #include<stdlib.h> #include<iostream> #include<bits/stdc++.h> using namespace std; int t; int main() { int T; scanf("%d",&T); while(T--){ char s[55]; scanf("%s",s); int n=strlen(s); for(int i=0;i<n;i++){ if(s[i]=='a'||s[i]=='e'||s[i]=='i'||s[i]=='o'||s[i]=='u') s[i]-=32;//或者 s[i]-='a'-'A'; else if(s[i]>'A'&&s[i]<'Z'){ if(s[i]!='A'&&s[i]!='E'&&s[i]!='I'&&s[i]!='O'&&s[i]!='U') s[i]+=32;//或者 s[i]+='a'-'A'; } } printf("%s\n",s); } return 0; }

    三、字符串函数(头文件:#include)

    标题函数的原理都是for循环来实现的。a,b均为数组,函数执行过程中可能会造成数组越界。

    1.strcpy(a,b);//字符串复制函数,将b复制到a中。

    2.strcmp(a,b);//字符串比较函数,返回值可能是>0,<0,=0;字符串的大小按照字符串来进行。

    TK 1800: 统计字符

    #include<stdio.h> #include<stdlib.h> #include<iostream> #include<bits/stdc++.h> using namespace std; int t; int main() { char t[10]; while(gets(t)){ if(strcmp(t,"#")==0) break; int a[10]={0}; char s[85]; gets(s); int n=strlen(s),m=strlen(t); for(int j=0;j<m;j++){ for(int i=0;i<n;i++){ if(t[j]==s[i]) a[j]++; } } for(int i=0;i<m;i++){ printf("%c %d\n",t[i],a[i]); } } return 0; }

    3.strcat(a,b);//字符串连接函数。将b中的元素连接在a的后面(从a的’\0’开始)。

    4.strlen(a);//求数组a的长度(不包含’\0’)。

    //strlen(a);的运用 1.for(int i=0;i<strlen(a);i++) //从时间复杂度来看,此方法不合适(推荐用以下两种) 2.int len=strlen(a); for(int i=0;i<len;i++) 3.for(int i=0;a[i];i++) //最后一位是'\0'(数字0)

    四、字符串的增、删、改、查。

    TK 20886----字符串编辑

    #include<stdio.h> #include<math.h> #include<string.h> char a[50]; int main(){ char b; gets(a); int n=strlen(a); scanf("%c",&b); int index=-1;//保存找到的下标 if(b=='D'){//删除第一次出现的字符(具体示例看题目描述) char c; scanf(" %c",&c);//注意去除输入流中的回车符 for(int i=0;i<n;i++){ if(a[i]==c){ index=i;//找到该字符后,标记其下标 break; } } for(int i=index;i<n;i++){ a[i]=a[i+1];//找到该字符后,从此位置开始让后面的字符前移一个位置即可完成删除操作 } } else if(b=='I'){//插入在最后一个字符的前面 char d,e; scanf(" %c %c",&d,&e); for(int i=n-1;i>=0;i--){//倒序查找最后一个字符 if(a[i]==d){ index=i; break; } } for(int i=n+1;i>index;i--){ a[i]=a[i-1];//找到该字符后,从最后一个字符到该字符让所有元素后移一个位置让index空出 //来即可完成插入操作 } a[index]=e;//最后将空出来的位置赋值即可 } else{//替换全部字符 char d,e; scanf(" %c %c",&d,&e); for(int i=0;i<=n;i++){ if(a[i]==d){ a[i]=e;//遍历找到后直接替换即可 index=i; } } } if(index!=-1) puts(a); else printf("Not exist\n"); return 0; }
    Processed: 0.014, SQL: 8