ACM 算法学习记录 —字符串学习
练习题
`
颠倒语序
输入三个单词组成的句子,将这三个单词反向输出,例如输入you love i,则输出i love you,每个单词长度不大于100(请用字符数组实现)
输入描述:
一行,三个字符串,用空格分开
输出描述:
一行,颠倒三个字符串的顺序,字符串之间用空格分开
`
一、我的想法
定义一个a[303]的char数组将输入的都存进去,然后判断遇到空格就换个char数组存储,但是运行时发现在输入空格后数据是存不到a[303]
错误代码
#include <bits/stdc++.h>
#include<string>
using namespace std;
int main() {
// 请补全代码,实现题目功能
char a[303];
cin >> a;
char a1[101];
char a2[101];
char a3[101];
for(int i = 0 ;i < strlen(a); i++){
if(i != ' ') a1[i] = a[i];
}
for(int i = strlen(a1)+1,j = 0; i < strlen(a);i++,j++){
if(i != ' ') a2[j] = a[i];
}
for(int i = strlen(a1)+strlen(a2)+1, j = 0; i < strlen(a);i++,j++){
a3[j] = a[i];
}
cout<<a3<<' '<< a2 <<' '<<a1<<endl;
return 0;
}
二、百度
1.代码如下
代码如下(示例):
#include<cstdio>
int n,k = 1;
char a[50][10],c;
int main(){
c = getchar();
while(('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || c == ' '){
if(c == ' '){
n = 0;
k++;
c = getchar();
continue;
}
a[k][n++] = c;
c = getchar();
}
for(int i = k;i >= 1;i--)
printf("%s ",a[i]);
return 0;
}
结果如图
可以看见输出的答案多出了一个空格
下一步是思路是将第一个单独输出
2.改进版
代码如下(示例):
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int n,k = 1;
char a[4][101],c;
int main(){
c = getchar();
while(('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || c == ' '){
if(c == ' '){
n = 0;
k++;
c = getchar();
continue;
}
a[k][n++] = c;
c = getchar();
}
// cout<< strlen(a[2]) <<" ";
for(int i = 1;i < strlen(a[2]);i++){
cout<<a[k][i];
}
for(int i = k-1;i >= 1;i--)
printf("%s ",a[i]);
return 0;
}
样例能过但还是报错
问题答案
# include <iostream>
# include <cstring>
using namespace std;
int main() {
char words[3][101];
for (int i=0; i<3; i++)
scanf("%s", words[i]);
printf("%s %s %s", words[2], words[1], words[0]);
return 0;
}
运用一个二维char数组存储有效的避免了空格问题
https://zhidao.baidu.com/question/1989733502164553387.html