Код: Выделить всё
char str[10];
std::cin.getline(str, 10);
как теперь можно сравнить массив str со строковой константой (наподобие if (str == "hello"))?
Модератор: Модераторы разделов
Код: Выделить всё
char str[10];
std::cin.getline(str, 10);
Код: Выделить всё
int cmp;
while(!(cmp =*s1++ - *s2++) && *s1);
Код: Выделить всё
#include <iostream>
#include <string>
usgin namespace std;
int main( void ) {
char str[10];
cin.getline(str, 10);
if ( string(str) == "test" ) {
cout << " is equal " << endl;
} else {
cout << " not equal" << endl;
}
return 1;
}
Код: Выделить всё
....
string str;
cin >> str
if ( str == "test" ) {
....
} else {
....
}
....
Не учите плохому. Эта фигня делает совсем не то же самое, что getline.
watashiwa_daredeska писал(а): ↑07.07.2009 09:37Не учите плохому. Эта фигня делает совсем не то же самое, что getline.
В принципе, совет пользоваться стандартной библиотекой -- правильный. Для чтения строки лучше пользоваться ::getline().
Код: Выделить всё
// ip.cpp
#include <iostream>
#include <string>
//#include <cstring>
bool eval(char* part) {
int total = 0;
for (int i = 0; part[i] != '\0'; i++)
total = ((total * 10) + (part[i] - '0'));
if ((total >= 0) and (total <= 255))
return true;
else
return false;
}
bool is_ip(char* str) {
const int size = 15;
int point_counter = 0;
int digit_counter = 0;
char part[4];
for (int i = 0; str[i] != '\0'; i++) {
if (point_counter < 4) {
if (((str[i] - 48) >= 0) and ((str[i] - 48) <= 9)) {
if (digit_counter < 3) {
part[digit_counter] = str[i];
digit_counter++;
}
else
return false;
}
else if (str[i] == '.') {
if (digit_counter == 0)
return false;
else {
part[digit_counter] = '\0';
if (eval(part)) {
digit_counter = 0;
point_counter++;
}
else
return false;
}
}
else
return false;
}
else
return false;
}
part[digit_counter] = '\0';
if (not eval(part))
return false;
if ((point_counter != 3) or (digit_counter == 0))
return false;
else
return true;
}
int main() {
char ip[17];
do {
std::cin.getline(ip, 16);
} while ((std::string(ip) != "dhcp") and (is_ip(ip) != true));
//} while ((std::strcmp(ip, "dhcp")) and (is_ip(ip) != true));
std::cout << "ip : " << ip << std::endl;
return 0;
}
Код: Выделить всё
using namespace std;
string ip;
do {
getline( cin,ip );
} while ( ip != "dhcp" )
Код: Выделить всё
// ip.cpp
#include <iostream>
#include <string>
bool is_in_range(char* part) {
int total = 0;
for (int i = 0; part[i] != '\0'; i++)
total = ((total * 10) + (part[i] - '0'));
if ((total >= 0) and (total <= 255))
return true;
else
return false;
}
bool is_ip(std::string& str) {
int point_counter = 0;
int digit_counter = 0;
char part[4];
for (int i = 0; i < str.length(); i++) {
if (point_counter < 4) {
if (((str[i] - 48) >= 0) and ((str[i] - 48) <= 9)) {
if (digit_counter < 3) {
part[digit_counter] = str[i];
digit_counter++;
}
else
return false;
}
else if (str[i] == '.') {
if (digit_counter == 0)
return false;
else {
part[digit_counter] = '\0';
if (is_in_range(part)) {
digit_counter = 0;
point_counter++;
}
else
return false;
}
}
else
return false;
}
else
return false;
}
part[digit_counter] = '\0';
if (not is_in_range(part))
return false;
if ((point_counter != 3) or (digit_counter == 0))
return false;
else
return true;
}
int main() {
std::string ip;
do {
std::getline(std::cin, ip);
} while ((ip != "dhcp") and (is_ip(ip) != true));
std::cout << "ip : " << ip << std::endl;
return 0;
}