字符串的输入输出
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;
}
用例:同上