ポインタを使って、文字列を走査し、@以降をどうにかして削除しなさい。
char str1[] = "youetsu@jc-21.jp"; int lenghth = 0;//文字列の長さ char *p = nullptr;
解法を考えると2つぐらいやり方がありそうな気がします。
int main() { char str[] = "youetsu@jc-21.jp"; int length = 0;//文字列の長さ char *p = str; while(*p != '\0') { if(*p == '@'){ *p = '\0'; break; } p++; } std::cout << str << std::endl; }
結果を表示してみる
ここで使っているアドレスをたどったループはそのうちstl(スタンダードテンプレートライブラリ)などで頻出なので、よく理解しておいたほうが、今後のゲームプログラマ人生を楽しく過ごすことができます。
#include <iostream> #include <string> int main() { char str[] = "youetsu@jc-21.jp"; char *at_index; char *p = str; while(*p != '\0') { if(*p == '@'){ //@マークが入っているアドレスを記憶しておく at_index = p; } p++; } //ループを抜けたとき*pは'\0'、pは'\0'の入っている変数のアドレスを指す。 //アドレスを1っ個ずつ増やしてループすることもできるよ //これが自然と出来ると上級者っぽい for(char *i = str; i<p; i++) { std::cout << *i; } std::cout << std::endl; //このループの仕方を使うと、さっき保存した@の入ってるアドレスから //'\0'のアドレスまでをループさせることができるので //その間を'\0'で埋めてやろう! for(char *i = at_index; i<p; i++) { *i = '\0'; } std::cout << str << std::endl; }
一応実行結果を示します。
ちゃんと、'@'以降が削られているのがわかると思います。
ポインタの使い方や、ループの方法など、重要なことが詰まった練習問題なのでよく理解するようにしてください。