自分自身をC + +で教えて、私は批判的なものが欠けていることを知っていますが、私の人生はそれが何であるかを理解できません。 ...find_last_of()およびsubstr()の後に文字列が空になりますか?
は、コードの巨大なブロックを許して、私は重要な要素にそれをダウントリムするように誘惑されたが、私はそれがそのまま残さ場合、私はあなたの人々が私のコーディングスタイルについて他の教育の批判があるかもしれません、考え出し
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#include <fstream>
using namespace std;
// main routine
int main(int argc, char *argv[]) {
// will store filetype here for later
string filetype = "";
string filename;
// if no arguments, die.
if (argc < 2) {
cout << "ERROR: Nothing to do." << endl;
return 1;
}
// if more than one argument, die.
else if (argc > 2) {
// TODO: support for multiple files being checked would go here.
cout << "ERROR: Too many arguments." << endl;
return 1;
}
// otherwise, check filetype
else {
string filename = argv[1];
cout << "Filename: " << filename << endl;
//searching from the end, find the extension of the filename
int dot = filename.find_last_of('.');
if (dot == -1){
// TODO: Add support for filenames with no extension
cout << "ERROR: Filename with no extension." << endl;
return 1;
}
string extension = filename.substr(dot);
if (extension == ".htm" || extension == ".html"){
filetype = "html";
}
else if (extension == ".c"){
filetype = "c";
}
else if (extension == ".c++" || extension == ".cpp") {
filetype = "cpp";
}
else {
cout << "ERROR: unsupported file extension" << endl;
// TODO: try to guess filetype from file headers here
}
}
cout << "Determined filetype: " << filetype << endl;
cout << "Filename: " << filename << endl;
return 0;
}
// All done :]
私が持っている問題は神秘的です。予想通り
int dot = filename.find_last_of('.');
string extension = filename.substr(dot);
このすべての作品:
string filename = argv[1];
、その後の拡張のためにそれを検索し、端から始まり、最初に自分の道を働い:私はそうのような文字列に渡される引数を置きますしかし、その後、私がファイル名を出力しようとすると、それは不思議な空ですか?私はcoutでデバッグを試みました。検索する前に文字列を印刷すると、正しく印刷されます。その後、何も印刷されません。これと同じように:
$ g++ test.cpp -o test.out; ./test.out foo.html
Filename: foo.html
Determined filetype: html
Filename:
私は過去にイテレータについて何かを思い出し、それをリセットするためにfilename.begin()
を使用してみましたが、これは何もしませんでした。誰かがこの困惑する問題に光を当てることができますか?
私たちは実際には重要な要素だけを好みます。 http://sscce.org/ – chris
コードをスキップし、ちょうど下の部分を読む:] –