(C++) 打印字符数组字符串的单词时出现问题
(c++) problem in printing words of char array string
我正在使用字符串(数据类型)和字符数组制作一个c ++程序。现在,数据类型可以打印单词。但是,我在使用字符数组时遇到了一些问题。代码如下:
#include<iostream>
#include<string.h>
using namespace std;
int main(){
char str[200];
string str1;
cout<<"Enter a string:t";
getline(cin,str1);
cout<<str1 <<endl;
cout<<"enter second string:t";
cin>>str;
cin.get(str,200);
cout<<str;
}
代码输出
正如您在输出中看到的那样,数据类型字符串正在打印单词。但是,字符数组缺少第一个单词。我做错了什么吗?还是 char 数组以不同的方式工作?请解释一下。谢谢。
虽然您已经发现不需要cin >> str;
,因为您只是再次写入以str
cin.getline (str, sizeof str)
,但您应该解决许多其他问题:
1.除非你的编译器是古老的,否则你应该#include <string>
,而不是C头string.h
;
2.不要在代码中使用魔术数字。如果您需要一个常量,例如对于str
中的最大字符数,#define
一个常量或使用全局enum
来执行相同的操作,例如
#define MAXC 200 /* if you need a constant, #define one (or more) */
...
char str[MAXC]; /* don't use 'magic-number', use a constant */
这样,如果您将来更改str
中的字符数,则不必选择整个代码并更改魔术数字的每个出现,例如cin.get(str,200);
.
3.验证每个用户输入。否则,失败的输入可能会在输入流上设置错误位,并且尝试从设置了错误位的流中读取可能会导致未定义的行为。你可以做:
if (!getline(cin,str1)) { /* VALIDATE every input */
cerr << "error: input failure - str1.n";
return 1;
}
和
if (cin.get (str, sizeof str))
cout << str << endl;
(注意:cin.get (str, sizeof str)
后不会再尝试读取,因此保护您使用str
就足够了)
4.始终在最后一行输出后输出换行符,以确保您的程序符合 POSIX 标准。否则,在许多操作系统上,如果写入stdout
,您将弄乱用户提示,或者如果将输出重定向到文件,您将创建一个不符合POSIX的输出文件,例如
my cat has none01:22 wizard:~/dev/src-cpp/tmp/debug>
总而言之,您可以执行以下操作:
#include <iostream>
#include <string> /* depending on your compiler */
#define MAXC 200 /* if you need a constant, #define one (or more) */
using namespace std;
int main (void) {
char str[MAXC]; /* don't use 'magic-number', use a constant */
string str1;
cout << "enter a string: ";
if (!getline(cin,str1)) { /* VALIDATE every input */
cerr << "error: input failure - str1.n";
return 1;
}
cout << str1 << endl;
cout << "enter second string: ";
// cin >> str; /* not needed */
if (cin.get (str, sizeof str))
cout << str << endl;
}
示例使用/输出
$ ./bin/cin.get_getline
enter a string: my dog has fleas
my dog has fleas
enter second string: my cat has none
my cat has none
cout<<"enter second string:t";
cin>>str;
cin.get(str,200);
在这里,首先您尝试将第二个单词两次读取到同一个变量中。 注释其中一个并尝试打印 STR 的内容。
#include<iostream>
#include<string.h>
using namespace std;
int main(){
char str[200];
string str1;
cout<<"Enter a string:t";
getline(cin,str1);
cout<<str1 <<endl;
cout<<"enter second string:t";
// cin>>str;
cin.get(str,200);
cout<<str<<endl;
}
- 当字符串是某个单词时给出输出?
- 当您在此单词中搜索单词时调整字符数组的大小?
- 尝试使用 Ifstream 打开.txt文件时C++问题
- 字数统计函数在将单词添加到一组唯一单词时遇到问题
- 尝试在 c++ 中按字母顺序排列单词时出现分段错误
- 搜索单词时的字母模式逻辑
- (C++) 打印字符数组字符串的单词时出现问题
- 使用_Popen Windows时问题
- 当没有更多的单词时,如何使用>>停止阅读
- 为什么当我运行此循环以打印字符串中的每个单词时,我缺少一个值
- 通过修改二叉搜索算法来改进它,使其在搜索大量单词(单词列表)中的单词时工作得更快
- 在 Linux 计算机中使用套接字发送和接收文件时C++问题
- 列出不带元音的单词时出错
- 在搜索单词时使用问号来代表任何字符
- 使用 QT 线程解决运行时问题
- C++ 运行时问题
- 遇到某个单词时停止文件输入
- 解析格式化输入时划分单词时出现问题
- OpenGL顶点着色器运行时问题(不使用VBOs或纹理)
- Xcode是否可以防止c++数组边界运行时问题?