Мне нужно найти строку с двумя вложенными циклами for. У меня проблемы с логикой.
Одна струна "Калифорния".
Проверить индекс с обоих концов -> <-
если каждый индексный символ соответствует, выберите эту строку.
int main(int argc, const char * argv[]) {
char stringValue[] = "California";
string s = stringValue;
string oreoString = "";
for(int index = 0; index < s.length(); index++){
for(int innerIndex = s.length(); innerIndex > 0; innerIndex--){
if (stringValue[index] == stringValue[innerIndex]){
oreoString = oreoString + stringValue[index];
}
}//End Inner-Loop
}//End Outer-Loop
cout << oreoString << endl;
return 0;
}
Проблема: мой результат дает мне "aaliiforniiaa"
Я отредактировал вывод
Вы не сказали нам, в чем проблема. Мы не собираемся просто писать за вас ваш код.
s[s.length()] находится за пределами строки и неопределенного поведения.
Declared - это струна oreo?
@Yksisarvinen, хотя s[s.length()] действительно выходит за рамки, это не неопределенное поведение в C++ 11 и более поздних версиях. length() совпадает с size(), и когда pos == size(), C++ 11 гарантирует, что operator[] возвращает ссылку на нулевой символ.
@CoderChick: Ясно, как грязь.





#include <string>
#include <iostream>
int main()
{
std::string input = "California";
int a = 0, b = 0;
for (int i=0; i<input.size(); ++i) {
for (int j=i; j<input.size(); ++j) {
if (input[i] == input[j] && (j-i+1) > (b - a + 1)) {
a = i;
b = j;
}
}
}
std::cout << input.substr(a, b-a+1) << std::endl;
}
Вот еще одно решение O (n) (только ввод в нижнем регистре)
#include <string>
#include <iostream>
#include <algorithm>
int main()
{
std::string input = "california";
int longest = 0;
int a = 0;
char occ[26]; memset(occ, -1, sizeof(occ));
for (int i=0; i<input.size(); ++i)
{
if (occ[input[i] - 'a'] == -1)
occ[input[i] - 'a'] = i;
if (i - occ[input[i] - 'a'] + 1 > longest) {
longest = i - occ[input[i] - 'a'] + 1;
a = occ[input[i] - 'a'];
}
}
std::cout << input.substr(a, longest) << std::endl;
}
Хотя вы предоставили пару примеров струны oreo, похоже, вы не объяснили, что они собой представляют.