Я новичок в C++, и я не могу понять это.
При запуске я получаю некоторый странный вывод. Я также пытаюсь сделать это самым простым способом. Как я могу просто напечатать слово в массиве суффиксов, а не весь лишний материал. Я попробовал несколько способов сделать это, и они все еще появляются.
#include <iostream>
#include <conio.h>
#include <string>
using namespace std;
int main(){
char word1[80];
char word2[80];
char suffix[80];
cout << "Enter the first word: ";
cin >> word1;
cout << "Enter the first word: ";
cin >> word1;
int len1 = strlen(word1);
int len2 = strlen(word2);
while(len1 > 0 && len2 > 0 && word1[len1] == word2[len2]) {
int k=0;
suffix[k]=word1[len1];
k++;
len1--;
len2--;
}
for(int i=strlen(suffix);i>=0; i--){
cout << suffix[i];
}
getch();
return 0;
}
Несколько вещей:
string
вместо массива char
. Таким образом, вам не нужно беспокоиться о памяти.k=0;
должно быть вне while
.len1 >= 0 && len2 >= 0
substr
(ссылка здесь).Вот измененная версия вашего кода:
#include <iostream>
#include <conio.h>
#include <string>
using namespace std;
int main() {
string word1,word2,suffix;
cout << "Enter the first word: ";
cin >> word1;
cout << "Enter the first word: ";
cin >> word2;
int len1 = word1.size()-1;
int len2 = word2.size()-1;
int k=0;
while(len1 >= 0 && len2 >= 0 && word1[len1] == word2[len2]) {
len1--;
len2--;
k++;
}
suffix=word1.substr(word1.size()-k,k);
cout << suffix;
getch();
return 0;
}
Я всегда думаю, что "самый простой способ" - это использовать кого-то другого. Вот один из способов написать вашу программу, которая использует стандартную библиотеку:
#include <algorithm>
#include <string>
#include <iostream>
std::string suffix(const std::string& a, const std::string& b) {
size_t len = std::min(a.size(), b.size());
auto its = std::mismatch(a.rbegin(), a.rbegin()+len, b.rbegin());
return std::string(its.first.base(), a.end());
}
int main () {
std::cout << suffix("December", "May") << "\n";
std::cout << suffix("January", "February") << "\n";
std::cout << suffix("April", "April") << "\n";
}
word2
, вы просто читаете вword1
дважды. Кроме того, вы вызываетеstrlen
дляsuffix
, ноsuffix
не является строкой.word1
является строкой, потому чтоcin >> word1;
читает в строке, ноsuffix
это просто массив символов. (Подумайте об этом. Как могstrlen
знать, что вернуть?)