sscanf、sprintf、fsprintf、fscanf、およびstringでのc_str()の使用法について

sscanf(文字列から数値)

sscanf関数プロトタイプはintsscanf(const char str、const char format、...)です。パラメータstrの文字列は、パラメータフォーマット文字列に従って変換およびフォーマットされ、変換された結果は対応するパラメータに格納されます。具体的な機能は次のとおりです。

(1)フォーマットに従って文字列からデータを抽出します。文字列から整数、浮動小数点数、文字列を抽出するなど。

(2)指定された長さの文字列を取得します

(3)指定された文字までの文字列を取得します

(4)指定された文字セットのみを含む文字列を取得します

(5)指定された文字セットまでの文字列を取得します

#include<iostream>

uisng namespace std;

int main(){
    
    

char str[]="1234321";
int a;
sscanf(str,"%d",&a);
......1.......
char str[]="123.321";
double a;
sscanf(str,"%lf",&a);
......2......
char str[]="AF";
int a;
sscanf(str,"%x",&a); //16进制转换成10进制

//另外也可以使用atoi(),atol(),atof().
}

#include <iostream>
#include <cstdio>
using namespace std;
int main() {
    
    
    char c[50] = "123";
    int a;
    sscanf(c, "%d", &a); // 不要忘记 “&”
    int b = 567;
    sprintf(c, "%d", b);
    cout << a << endl << c;
    return 0;
}
 
/*
sscanf将字符数组转换为数字,输入到数字变量中
sprintf将数字转换为字符数组,输出到字符数组变量中
*/

sprintf(数値は文字列に変換されます)

sprintf関数のプロトタイプはintsprintf(char str、const char format、...)です。関数は文字列をフォーマットすることであり、特定の関数は次のとおりです。

(1)デジタル変数を文字列に変換します。

(2)整数変数の16進文字列と8進文字列を取得します。

(3)複数の文字列を連結します。

#include<iostream>

uisng namespace std;

int main(){
    
    
    char str[256] = {
    
     0 };
    int data = 1024;

    //将data转换为字符串
    sprintf(str,"%d",data);

    //获取data的十六进制
    sprintf(str,"0x%X",data);

    sprintf(str,"%x",data);//10进制转换成16进制,如果输出大写的字母是sprintf(str,"%X",a)

    //获取data的八进制
    sprintf(str,"0%o",data);


    const char *s1 = "Hello";
    const char *s2 = "World";
    //连接字符串s1和s2
    sprintf(str,"%s %s",s1,s2);
    cout<<str<<endl; 
    return 0;
}

c_str()について

# include<iostream>
# include<cstring>
# include<cstdio>
# include<algorithm>
using namespace std;

int main()
{
    
    
	//假设输入格式为17:21:07 00:31:46 (+1),取其中的数字
	string line;
	int h1, m1, s1, h2, m2, s2, d;
    sscanf(line.c_str(), "%d:%d:%d %d:%d:%d (+%d)", &h1, &m1, &s1, &h2, &m2, &s2, &d);
    //c_str()函数返回一个指向正规C字符串的指针常量,因为sscanf只能接收c类型的字符串
	return 0;
}

これはc言語との互換性のためです。c言語には文字列タイプがないため、文字列オブジェクトは、文字列クラスオブジェクトのメンバー関数c_str()を使用してcの文字列スタイルに変換する必要があります。

注:メソッドc_str()によって返されるポインターを操作するには、必ずstrcpy()関数を使用してください。

おすすめ

転載: blog.csdn.net/qq_45812180/article/details/114637664