【发布时间】:2015-07-18 11:26:55
【问题描述】:
我有一封类型为 char 数组的电子邮件:
char email[80] = "pewdiepie@harvard.edu.au"
如何删除@ 和它后面的字符串并得到pewdiepie 作为最终结果?
【问题讨论】:
-
检查一下,也许它对你有用stackoverflow.com/questions/20971804/…
我有一封类型为 char 数组的电子邮件:
char email[80] = "pewdiepie@harvard.edu.au"
如何删除@ 和它后面的字符串并得到pewdiepie 作为最终结果?
【问题讨论】:
比如下面这种方式
if ( char *p = std::strchr( email, '@' ) ) *p = '\0';
在 C 语言中,您必须在 if 语句之前声明变量 p。例如
char *p;
if ( ( p = strchr( email, '@' ) ) != NULL ) *p = '\0';
如果代替字符数组使用std::string类型的对象作为例子
std::string email( "pewdiepie@harvard.edu.au" );
那你就可以写了
auto pos = email.find( '@' );
if ( pos != std::string::npos ) email.erase(pos);
【讨论】:
简单
#include <string>
std::string email("pewdiepie@harvard.edu.au");
email.erase(email.find('@'));
【讨论】:
如果你坚持让它有一个char[],而不是一个字符串
char email[80] = "pewdiepie@harvard.edu.au";
char name[80]; // to hold the new string
name[std::find(email, email + 80, '@') - email] = '\0'; // put '\0' in correct place
strncpy(name, email, std::find(email, email + 80, '@') - email); // copy the string
如果你想改变原来的char[],
*(std::find(email, email + 80, '@')) = '\0';
【讨论】: