c++中字符串中的偶数和奇数索引字符
Even and odd indexed characters in a string in C++
给定一个长度为N的字符串S,其索引从0到N-1,将其偶数索引和奇数索引的字符作为两个空格分隔的字符串打印在一行上。0将被视为偶数索引。输入字符串的个数为T,取值范围为1 ~ 10。该程序在代码块(离线)中给出正确的结果,但不在HackerRank平台上。它给出了错误:
我的代码是:解决方案。cc:在函数'int main()':
解决方案。Cc:22:9:警告:'char* gets(char*)'已弃用(已声明)at/usr/include/stdio.h:638) [-Wdeprecated-declarations](g[我]。s);^
解决方案。Cc:22:20: warning: 'char* gets(char*)'已弃用(声明在/usr/include/stdio.h:638) [-Wdeprecated-declarations](g[我]。s);^
/ccQXNkYE。0:在函数
main': solution.cc:(.text.startup+0x4e): warning: the
中得到"函数是危险的,不应该使用。
#include <cstdio>
#include <iostream>
struct str {
char s[10000];
};
int main() {
using namespace std;
int T;
cin >> T;
fflush(stdin);
str g[10];
for(int i = 0; i < T; ++i) {
gets(g[i].s);
fflush(stdin);
}
for(int t = 0; t < T; ++t) {
int j = 0;
while(j < strlen(g[t].s)) {
if(j % 2 == 0)
cout << g[t].s[j];
++j;
}
cout << " ";
int k = 0;
while(k < strlen(g[t].s)) {
if(k % 2 == 1)
cout << g[t].s[k];
++k;
}
cout << endl;
}
return 0;
}
函数gets()是危险的,是平台不允许的。warning: the gets' function is dangerous and should not be used.
平台甚至告诉你
为什么函数是危险的?简单。它可能导致缓冲区溢出。您将char[]定义为包含终止符在内的1000个字符。gets函数不知道这个。它会很高兴地将用户输入的任何内容复制到数组中,即使它不适合。数组后面的任何内容都将被多余的文本覆盖。这可能会覆盖其他变量,甚至包含可能被执行的恶意代码。最好的情况是程序崩溃。
用fgets()
比较好。fgets()
还要求它应该复制的字符数量。在你的例子中,它应该是999,因为你不想"推翻"终结者。1000年。字符将作为你的终止符。
但是这是C的方法,而不是c++。
如果输入大于10的数字会发生什么?你的程序会崩溃的。
下面的代码将完全避免char[],并允许您使用c++的std::string
。
#include <iostream>
#include <vector>
#include <string>
int main()
{
std::vector<std::string> inputs;
int strings; // Your T
std::cin >> strings;
if (strings < 1 || strings > 10) {
std::cout << "Error" << std::endl;
exit(1);
}
for (int i = 0; i < strings; i++) {
std::string temp;
std::cin >> temp;
inputs.push_back(temp);
}
// Do your reverse stuff.
exit(0);
}
有些平台不允许gets(),因为它很危险。请使用
scanf(" %[^n]s",string_name);
输入包含空格或fgets()或cin.getline()的字符串。
编辑:
正如我的同事所说,更好的版本是使用cin.getline()而不是上面提到的任何其他函数
- 将转换字符键入 int 以用作向量C++的索引
- 查找字符在两个索引之间出现的次数
- *无符号字符中的索引值
- C++ char 类查找字符索引
- int 数组,但索引是字符?
- 为什么在 c++ 中索引字符串会发出隐式转换警告?
- 根据字符获取数组的索引
- CPP:如何获取字符的最后一个索引
- 如何计算 3d 数组中的索引值在内存中的位置?如何计算字符**中的索引值在内存中的位置?
- 将特定索引处的字符数组内容与字符文字 - cpp 进行比较
- 为字符串中的每个字符(不是字符位置!)分配唯一的索引
- 通过字符串的字符对整数数组进行索引
- 从给定索引返回子字符字符串的函数
- 在C 字符串中,为什么在最后一个字符之后,通过索引和()访问索引时行为是不同的
- 是否可以使用字符串或字符索引数组
- 如何使该程序在数组中打印搜索字符的索引,否则将找不到它
- 如何在 C++ 的字符串中打印从一个索引到另一个索引的字符范围
- 为什么在使用字符索引数组时会出现这种不同的行为
- 从 1 中创建新的字符 * 作为参数,元素位于 2 个索引之间
- 字符串下标超出范围.我不知道如何使用字符索引数组,所以我使用了(无符号整数),但它不起作用