题目描述
给定一个字符串,请你编写一个函数,void print(char str[]), 将这个字符串打印出来。
样例
输入样例:
I love AcWing.
输出样例:
I love AcWing.
算法1 字符数组
思路
复习字符数组的输入输出,字符数组要使用 cin.getline 读入, 第一个参数为字符数组名,第二个参数为长度,为了确保数据全部读入,该数字要比长度大一点!!!(惨痛的教训)
C++ 代码
#include <iostream>
#include <string>
using namespace std;
void print(char a[])
{
for (int i = 0; a[i]; i ++ )
cout << a[i];
}
int main()
{
char a[130];
cin.getline(a, 120); // 注意这里的数字,如果你只写了100,那么最多只会读99个字符!
print(a);
return 0;
}
算法2 字符串
思路
因为有了上面的惨痛教训,所以有了算法2,直接使用字符串就不会读不完整的问题,不过还是注意输入有空格,所以使用 getline 读入字符串。
c++ 代码
#include <iostream>
#include <string>
using namespace std;
void print(string a)
{
for (int i = 0; a[i]; i ++ )
cout << a[i];
}
int main()
{
string a;
getline(cin, a);
print(a);
return 0;
}
char的读入还有用fgets的
使用fgets()函数会储存换行符,输出时会影响格式导致Presentation Error
你好,请问自定义函数中for(int i = 0;a[i];i++)里面单独的a[i]是什么意思,为什么这样写
因为字符数组后面会自动加上’\0’,所以这里a[i]其实就是a[i]!=’\0’,即输出到数组最后时停止。
但更符合C++风格的做法是使用 s.length() 或 s.size() 作为循环的边界条件
虽然我觉得你第二种方法非常的好,但是你修改了函数中的参数啊,参数指定用的char数组
没有修改呀,print函数只做了输出,没有做修改。
给定一个字符串,请你编写一个函数,void print(char str[]), 将这个字符串打印出来。其实也没差啦,我就是抬杠哈哈哈哈~ 爱你
emmm......
emmm……
emmm……
emmm……
emmm……
emmm……
emmm......
也许,可以用c_str转换一下🤔
emmm....有时候我在想stirng和char数组有什么区别
#include[HTML_REMOVED]
#include[HTML_REMOVED]
using namespace std;
int main()
{
string s;
getline(cin,s);
cout<<s;
return 0;
}
string==6版char[]
为什么写100 只会读入99个
因为字符串最后一位是’\0’,这些都是读入字符串的函数,如果有100位字符的话就会不读入最后一个字符然后变成’\0’,我是这样理解的,但实际不知道是不是
“char a[130]”,a本身是字符数组而不是字符串,最后没有结束符’\0’,但是当你指定 100 作为最大读入字符数时,getline 函数会读入最多 99 个字符,因为最后一个字符会被用来存放字符串的终止符\0。
我也不知道对不对~