请问每个输入的字符串都需要保存,并判断下一个或上一个字符串吗,我感觉这思路错了,思路应该是怎样的
这个题规定了两个操作,一个赋值,一个比较,你可以把这两个操作分别写成两个函数,判断出输入字符串为哪种操作后,调用对应函数即可。
定义一个全局数组,用来保存编号对应的数,如果是赋值操作,就修改对应的编号的值,如果是比较操作,就比较后输出就行。
不需要保存每行字符串,输入一行处理一行就行。
逐行接收处理就行,不需要保存
我的代码是这样的:
#include <iostream>
#include <string>
using namespace std;
int main()
{
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
string a;
cin >> a;
int b = a.size();
int w[200] = { 0 };
int c;
for (int j = 0; j < b; j++)
{
c = a[j];
if (c >(int)'a'&&c < (int)'z' || c == (int)'a' || c == (int)'z')
{
w[c-(int)'a']++;
}
}
for (int g = 0; g < 100; g++)
{
if (w[g] == 1)
{
cout << (char)(g+(int)'a');
}
}
cout << endl;
}
return 0;
}
执行之后只能按照字母表的顺序输出只出现过一次的小写字母,并不是输入顺序的只出现过一次的小写字母。例如:输入“aaabbzxdddd",结果输出的是”xz",并不是“zx”。求解!!!
根据提问的内容,需要保存输入的每个字符串并判断前后字符串,可以使用一个字符串数组来保存输入的字符串,然后通过循环遍历数组来判断相邻的字符串。具体的思路如下:
以下是一个示例代码,可以作为参考:
#include <iostream>
#include <string>
using namespace std;
int main()
{
const int MAX_STR_NUM = 100; // 最大字符串数量
string strArr[MAX_STR_NUM]; // 字符串数组
int strNum = 0; // 字符串数量
// 读入字符串
while (strNum < MAX_STR_NUM)
{
string str;
cin >> str;
if (str == "end") // 如果输入end表示结束输入
{
break;
}
strArr[strNum] = str;
strNum++;
}
// 判断相邻字符串
for (int i = 0; i < strNum - 1; i++)
{
if (strArr[i] == strArr[i+1])
{
cout << "相邻的两个字符串相同:" << strArr[i] << endl;
}
else if (strArr[i].length() < strArr[i+1].length())
{
cout << "前者比后者短:" << strArr[i] << endl;
}
else if (strArr[i].length() > strArr[i+1].length())
{
cout << "前者比后者长:" << strArr[i] << endl;
}
else
{
cout << "前者比后者字典序小:" << strArr[i] << endl;
}
}
return 0;
}
以上代码实现了读入多个字符串并保存到数组中,然后遍历数组判断相邻字符串的长度和字典序,最后输出结果。这个示例可以作为参考,具体的实现可以根据需要进行修改。