问题 A: 字符串连接
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int main()
{
char a[100],b[100];
char sum[200];
while(scanf("%s %s",a,b)!=EOF)
{
int n=strlen(a);
int m=strlen(b);
for(int i=0;i<n;i++)
{
sum[i]=a[i];
}
for(int j=0;j<m;j++)
{
sum[n+j]=b[j];
}
for(int k=0;k<n+m;k++)
{
cout<<sum[k];
}
printf("\n");
}
}
问题 B: 首字母大写
纯纯假设就行
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int main()
{
string s;
while(getline(cin,s)){
if(s[0]&&s[0]>='a'&&s[0]<='z')
s[0]=s[0]-32;
for(int i=0;i<s.length()-1;i++){
if((s[i]==' '||s[i]=='\t'||s[i]=='\r'||s[i]=='\n')&&s[i+1]>='a'&&s[i+1]<='z')
s[i+1]=s[i+1]-32;
}
cout<<s<<endl;
}
return 0;
}
问题 C: 字符串的查找删除
在这里插入代码片
问题 D: 单词替换
思路:先输入一个字符串后,将每个单词存入一个二维数组中,然后用strcmp函数对比找出要替换的单词,再直接输出要替换的单词即可
但是oj提示编译错误,应该是oj自己的问题。
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int main()
{
char s[1010];
char str[110][110];
char a[110],b[110];
while(gets(s)!=NULL)
{
int len=strlen(s);
//用row,column分别来记录单词
int row=0,column=0;
for(int i=0;i<len;i++)
{
//存到二维数组中来
if(s[i]!=' '||i==len)
{
str[row][column++]=s[i];
}
if(s[i]==' ')
{
str[row++][column]='\0';
column=0;
}
}
gets(a);
gets(b);
for(int i=0;i<=row;i++)
{
//替换步骤
if(strcmp(str[i],a)==0)
{
printf("%s",b);
}
else
{
printf("%s",str[i]);
}
if(i<row)
{
printf(" ");
}
else
{
printf("\n");
}
}
}
getchar();
return 0;
}
问题 E: 字符串去特定字符
我觉得我就是对的,就是过不了
思路:要去掉指定的字符,可以想着这个字符不输出
#include <iostream>
#include<stdio.h>
#include <cstring>
using namespace std;
int main()
{
char s[10005];
char c;
while(scanf("%s",s)!=EOF)
{
int lens=strlen(s);
c=getchar();
for(int i=0;i<lens;i++)
{
if(s[i]!=c)
{
printf("%c",s[i]);
}
}
printf("\n");
getchar();
}
return 0;
}
问题 F: 数组逆置
oj有问题样的,这个就一直编译错误,但是codeblocks能过
#include <iostream>
#include<stdio.h>
#include <cstring>
using namespace std;
int main()
{
char a[210];
while(gets(a)!=NULL)
{
int lens=strlen(a);
for(int i=0;i<lens;i++)
{
cout<<a[lens-1-i];
}
printf("\n");
}
return 0;
}
问题 G: 比较字符串
思路:用strlen比较两个数组长度就可以了
但是我的代码没过hhhh,留在这个自己个纪念
#include <iostream>
#include<stdio.h>
#include <cstring>
using namespace std;
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
for(int i=0;i<n;i++)
{
char a[55];
char b[55];
scanf("%s%s",a,b);
int a1=strlen(a);
int b1=strlen(b);
if(a1>b1)
{
printf("%s is longer than %s",a,b);
}
else if(a1==b1)
{
printf("%s is equal long to %s",a,b);
}
else
{
printf("%s is shorter than %s",a,b);
}
}
printf("\n");
}
}
问题 H: 编排字符串
代码链接:https://blog.csdn.net/qq_34767784/article/details/89020232
思路:因为只输入4个字符,所以那个数组只存4个字符,然后再考虑下输入大于4,少于4的情况
#include <iostream>
#include<stdio.h>
#include <cstring>
using namespace std;
int main()
{
char str[4][25];
int m;//m表示输入多少行,数组用来存字符串
int num=0;
scanf("%d",&m);
int i,j;
while(m--)
{
//这个数组只存4个字符串,超过了就覆盖掉
scanf("%s",str[num%4]);
i=num;//i用来控制输出下标
if(num<4)
{
for(j=1;j<=num+1;j++)
{
printf("%d=%s",j,str[i--]);
if(j==num+1)
printf("\n");
else
printf(" ");
}
}
else//字符串多于4个时候
{
for(j=1;j<5;j++)
{
printf("%d=%s",j,str[(i--)%4]);//注意取余
if(j==4)
printf("\n");
else
printf(" ");
}
}
num++;//输入字符串计数
}
return 0;
}
问题 I: 【字符串】回文串
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int maxn=256;
//判断是否为回文串
bool judge(char str[])
{
int len=strlen(str);
for(int i=0;i<len/2;i++)
{
if(str[i]!=str[len-1-i])
{
return false;
}
}
return true;
}
int main()
{
char str[maxn];
// while(gets(str))笑死在oj上就编译错误,codeblocks跑就没事,无语
while(scanf("%s",str)!=EOF)
{
bool flag =judge(str);
if(flag==true)
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
return 0;
}