char s[N][N];
for(int i = 0 ; i < n ; i ++)
for(int j = 0 ;j < n ; j ++)
cin >> s[i][j];
for(int i = 0 ; i < n ; i ++)
{
for(int j = 0 ;j < n ; j ++)
cout << s[i][j];
cout << endl;
}
注意这代码在读入时是不会读入空格的
还有就是这只能存3*3个字符,也即是前九个字符,多余的输入就不会被输出;还有在打印图像中注意输出换行;
cin,getline,cin.getline具体使用博客,后面俩个可以读入空格
C语言二维字符数组的输入,字符串的输出以\0为结尾
二维字符的读入2
getchar,清除缓存
把所有的内容都输入完成并且按下了Enter键后,我们的输入才被送进去了输入缓冲区
7-2 查找单价最高和最低的书籍 :
结构体的使用,这里就是要求单价和书名;如果求出两个变量;如果咱只定义maxn 求出单价的话;那对应的书的名字就不好求了;所以这了的maxn,可以定义没指定的那个结构体数组;struct是一个结构体后面要加;
带有空格的输入模板:
就是在string 定义是如何求长度?
可以用.size() 或者是 .length();
如果用字符数组输入, 求长度只能用strlen
函数
注意这里求的数组大小不是原本规定是多大就是多大, 是有多少, 就算多少;
eg:
#include <iostream>
using namespace std;
#include <algorithm>
#include <string.h>
int n;
struct book{
double price;
char name[32];
}b[10];
bool cmp(book a,book b)
{
return a.price < b.price;
}
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
getchar();
cin.getline(b[i].name,32);
cin>>b[i].price;
}
sort(b,b+n,cmp);
for(int i=0;i<n;i++)
printf("%s %.1f\n",b[i].name,b[i].price);
return 0;
}
char name[20];
cin.getline(name, 20);
cout << name << endl;
这个只能输出一串;怎么输出两串?
string name[20];
#include<iostream>
#include<cstring>
using namespace std;
/*
$ 9
@ @@@@@
@@@ @@@
@ @ @
@@@ @@@
@@@ @@@@@
@@@ @ @ @
@@@ @@@@@
@ @ @ @
@ @@@@@
*/
int main(){
int n,flag = 0;
char s;
string a[110];
scanf("%c %d",&s,&n);
getchar();//必须有
for(int i=0;i<n;i++){
getline(cin,a[i]);//每次输入一行
}
for(int i=0;i<n;i++){//将字符改变成所需要的字符
for(int j=0;j<n;j++){
if(a[i][j] != ' '){
a[i][j] = s;
}else {//必须有空格
a[i][j] = ' ';
}
}
}
for(int i=0;i<n;i++){//判断是否相同
for(int j=0;j<n;j++){
if(a[i][j] != a[n-i-1][n-j-1]){
flag = 1;
}
}
}
if(flag == 0){
printf("bu yong dao le\n");
}
for(int i=n-1;i>=0;i--){//倒着输出
for(int j=n-1;j>=0;j--){
printf("%c",a[i][j]);
}
printf("\n");
}
return 0;
}
后面跟字符串的增、删, 查, 改;
字符串各种函数集合
字符串函数
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s1="string of many words.",s2="many";
//s1="string of many words.和"s1("string of many words.")等价。都调用了string类构造函数。
int i;
cout<<s1<<endl;
i=s1.find(s2);
//调用find函数,返回s2在s1中的位置。在这里返回10,因s1在s2起始位置是10
s1.replace(i,4,"few");//调用replace函数用字符串few来替换s1中的4个字符。i的值就是find的返回值,
//many在字符串中的位置,并且表示替换从这该位置开始。
cout<<s1<<endl;
s1.erase(i,4);
//删除了s1字符串中从第10个开始的4个字符
cout<<s1<<endl;
s1.insert(i,"simple ");
//把字符串"simple"插入字符串s1的第10个字符的位置。
cout<<s1<<endl;
}
//上面倒着来说是增删改查
cin.getline(name, 32);
//这里只是一行读取;name必须市char类型, 不能是string
//后面一定要有长度
//这个是结构体的,输入所以个人理解cin.getline适合读入一维的
for(int i=0;i<n;i++)
{
getchar(); //换行用getchar()吸收
cin.getline(b[i].name,31);//后面必有大小
cin>>b[i].price;//输出格式;
printf("%s %.1f\n",b[i].name,b[i].price);
}
包含空格的二维字符数组读入:
string a[110];
scanf("%c %d",&s,&n);
getchar();//必须有
for(int i=0;i<n;i++){
getline(cin,a[i]);//每次输入一行
}