字符串基础

字符串的输入输出

1.

int n;
scanf("%d\n",&n);
char arr[n+1];
for(int i = 0;i < n+1;i++){
//注意:scanf在遇到空格或enter键时会停止接收
   scanf("%c",&arr[i]);
}
for(int j = 0;j < n+1;j++){
   printf("%c",arr[j]);
}

用例:5

          12345

输出:12345

2.

int n;
scanf("%d",&n);
char arr[n+1];
scanf("%s",&arr);
printf("%s",arr);

用例:同上

3.

int n;
cin>>n;
string arr;
getline(cin,arr)
cout<<arr;
// cin.getline(arr,n);

用例:同上

4.

//利用 fgets()函数和fputs()函数实现字符串的输入输出
//注意:fgets 函数在遇到 '\n','\0' 会结束接收
//stdin 输入流,stdout 输出流
int n;
scanf("%d",&n);
char arr[n+1];
fgets(arr,n+1,stdin);
fputs(arr,stdout);

用例:同上

5.不使用函数返回字符串的长度,字符串复制拼接

#include<bits/stdc++.h> 

using namespace std;
int main(){
//将arr复制到brr上
int n;
scanf("%d",&n);
char arr[n+1],brr[n+1];
scanf("%s",&arr);
for(int i = 0;i < n;i++){
   brr[i] = arr[i];
}
brr[n] = '\0';
printf("%s",brr);	
}



用例:5 

           12345

输出:12345

//使用函数复制
#include<bits/stdc++.h> 
using namespace std;
int main(){
	int n;
	scanf("%d\n",&n);
char arr[n+1];
char brr[n+1];
fgets(arr,n+1,stdin); 
strcpy(brr,arr);
printf("%s",brr);
//fputs(brr,stdout);
} 

用例:同上

#include<bits/stdc++.h> 

using namespace std;
int main(){
int n;
scanf("%d\n",&n);
string arr,brr;
//当arr中有空格时scanf是不适用的,getline 的默认结束符是\n 
getline(cin,arr);
brr = arr;
cout<<brr;	
}



 用例:同上

c++对不同的流对象都声明了getline方法

getline function(string::getline())

     是定义在std命名空间的全局函数,但是因为函数里面使用了string所以声明在了<string>头文件中

   istream& getline ( istream& is, string& str, char delim );   // delim 表示结束符
   istream& getline ( istream& is, string& str ); 

声明在<iostream>中的原型 

istream& getline (char* s, streamsize n );
istream& getline (char* s, streamsize n, char delim ); 

6.返回字符串的长度

#include<bits/stdc++.h> 

using namespace std;
int main(){
// 不使用
char arr[80];
int count=0;
fgets(arr,80,stdin);
for(int i = 0;i < 80;i++){
   if(arr[i] == '\0'){
   break;   
 }else{
   count++;
 }
}
printf("%d",count);	
}



#include<bits/stdc++.h> 

using namespace std;
int main(){
char arr[80];
int len;
int size;
fgets(arr,80,stdin);
// 比较strlen 和sizeof的值
len = strlen(arr);
size = sizeof(arr);
printf("%d %d",len,size);
}



//string 
string arr;
getline(cin,arr);
printf("%d",arr.length());
//length() 等同于 size()

7.连接两个字符串

char arr[80],brr[80];
    scanf("%s",&arr);
    scanf("%s",&brr);
    printf(strcat(arr,brr));

用例:12345

           abcde

输出:12345abcde

    //不使用strcat函数将字符串连接
//步骤:
//1.从取数
//2.根据字符串的长度进行for语句赋值
//3.输出arr
//注意:
//1.要使用getline函数取值
//2.要注意字符串最后的'\0'
    char arr[80],brr[80];
    cin.getline(arr,80);
    cin.getline(brr,80);
    int lena = strlen(arr);
    int lenb = strlen(brr); 
    for(int i= lena j=0;;i <=lena+lenb;i++ j++){
        arr[i]=brr[j];
    }
    arr[lena+lenb] = '\0';
    printf("%s",arr);

用例:同上

 

//使用string类型
//注意:使用cout
    string arr,brr;
    getline(cin,arr);
    getline(cin,brr);
    arr = arr +brr;
    cout<<arr;

8.比较两个字符串

    char arr[80],brr[80];
    scanf("%s",arr);
    scanf("%s",brr);
    int i = strcmp(arr,brr);
    printf("%d",i);
//不使用strcmp函数进行字符串比较
//strcmp原理:
//1.按字典值比较,若等于则下一个进行比较,若小于则返回-1,若大于则返回1,若到'\0'还是等于则返回0
//2.若一个字符串没有写上'\0',则比较的结果一定是它大(有待商讨)
#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    char arr[80],brr[80];
    cin.getline(arr,80);
    cin.getline(brr,80);
    int lena = strlen(arr);
    int lenb = strlen(brr);
    int len = 0;
    if(lena>=lenb){
        len = lena;
    }else{
        len = lenb;
    }
    for(int i=0;i<=len;i++){
        if(arr[i]>brr[i]){
            printf("1");
            break;
        }else{
            if(arr[i] == brr[i]){
            	if(i ==len) 
            	printf("0");
                continue;
            }else{
                printf("-1");
                break;
            }
        }
    }
    return 0;
}

用例:12345

           acd

输出:-1 

    //use string
    string arr,brr;
    getline(cin,arr);
    getline(cin,brr);
    if(arr>brr){
        cout<<1;
    }else{
        if(arr==brr)
        cout<<0;
        else
        cout<<-1;
    }

用例:同上

  #include<bits/stdc++.h> 

using namespace std;

int main( )
{
    char arr[80];
    int N;
    scanf("%s",&arr);
    scanf("%d",&N);
    char brr[N];
    int sum = 0;
    int j = 0;
    int len = strlen(arr);
    while(len){
        for(int i=0;i<N;i++){ 
       brr[i]=arr[sum];
	   sum++;len--;
	   if(len==0)
	   break;
    }
    if((sum+1)%N==0)
    brr[N]='\0';
    else
    {
    	j=(sum+1)%N;
    	for(int i=N-j;i<=j;i++){
    		brr[i]=' ';
		}
	}
    printf("%s\n",brr);
    }
    
    return 0;
}

 用例:

adfasdfsadsgsg
3

输出:

adf  
asd  
fsa  
dsg  
sg
#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    char arr[80];
    int N;
    cin.getline(arr,80);
    scanf("%d",&N);
    int len = strlen(arr);
    for(int i=0;i<len;i++){
        printf("%c",arr[i]);
        if((i+1)%N==0)
        printf("\n");
    }
    
    return 0;
}

 用例:同上

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值