将字符串中的数字转化为整数(string->int)

本文介绍了一种使用C++中的stringstream来高效处理字符串中数字的方法。通过读取输入字符串并在遇到非数字字符时进行转换,该方法能够有效地提取并转换字符串内的整数。此技术对于需要频繁解析数字的应用场景特别有用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

将每个字符乘10的倍数的方法太缓慢且局限性太多,用sscanf和sprintf晦涩难记且不稳定。

所以有了stringstream,需包含头文件sstream.

将字符串s中的数字复制到tmp中,每次遇到非数字就转化。


#include <iostream>
#include <sstream>
using namespace std;

string s,tmp;
stringstream ss;
int num;
int main(int argc, char const *argv[]) {
    while(cin>>s)
    {
        for(int i=0;i<s.size();i++)
        {
            if(s[i]>='0'&&s[i]<='9')
                tmp+=s[i];
            else
            {
                ss << tmp;
                ss >> num;
                printf("%d\n",num);
            }
        }
    }
    return 0;
}


<think>我们有一个任务:将整数转换字符串并与固定文本拼接,然后显示在UI中。 用户已经提供了两个引用,但引用[2]似乎与问题无关。引用[1]说明了FString的特性:可变、可修改,但开销较大。 步骤: 1.整数转换字符串:使用FString::FromInt(int32)或FString::Printf 2. 拼接固定文本和转换后的整数字符串:可以使用FString的加法运算符(+)或者FString::Printf进行格式化 3. 将拼接后的FString转换为FText:使用FText::FromString 4. 设置到UI文本控件 注意:由于固定文本可能是需要本地化的,所以理想情况下应该使用FText来处理固定文本部分。但是,由于用户要求拼接整数,而整数转换通常不需要本地化(数字格式可能需考虑,但简单情况可以直接转换),所以这里有两种做法: a) 固定文本使用FString(不推荐,因为无法本地化) b) 固定文本使用FText,然后通过FText::Format来将数字作为参数插入(推荐,因为固定文本可以本地化) 但是,用户明确要求使用FText::FromString和FString拼接,所以这里先按照用户要求的方式(即不本地化)来实现。同时,我们也会提供推荐的方法(使用FText::Format)作为扩展。 方法一(用户要求的方法):使用FString拼接 示例代码: int32 Number = 123; FString FixedText = TEXT("当前任务进度: "); FString ResultString = FixedText + FString::FromInt(Number); ic->TaskCellchild->SetText(FText::FromString(ResultString)); 方法二(推荐方法):使用FText::Format,支持本地化 FText FormatText = NSLOCTEXT("YourNamespace", "YourKey", "当前任务进度: {0}"); FText ResultText = FText::Format(FormatText, Number); ic->TaskCellchild->SetText(ResultText); 由于用户的问题中提到了“固定文本”,我们假设这个文本是固定的,不需要本地化,那么按照用户要求使用第一种方法。 但是,用户的问题中提到了“参考站内引用”,引用[1]告诉我们FString是可以修改的,而FText是不可变的,并且FText更适合UI显示(因为支持本地化)。因此,如果固定文本需要支持多语言,则应该使用方法二。 根据用户的问题,我们主要使用方法一,因为用户要求使用FText::FromString和FString拼接。 具体步骤: 1.整数123转换字符串:FString::FromInt(123) -> 得到FString类型的"123" 2. 拼接固定文本和这个字符串:如固定文本是"任务进度: ",则拼接后为"任务进度: 123" 3. 用FText::FromString将整个字符串转为FText 4. 调用SetText设置 代码示例: ic->TaskCellchild->SetText(FText::FromString(TEXT("任务进度: ") + FString::FromInt(123))); 注意:TEXT宏只能用于字面值字符串,不能直接用于FString。但是,我们可以将两个FString相加,而TEXT宏生成的字符串可以隐式转换为FString。所以上述代码中,TEXT("任务进度: ")转换为FString,然后与FString::FromInt(123)的结果相加。 另一种写法(使用FString::Printf): FString Result = FString::Printf(TEXT("任务进度: %d"), 123); ic->TaskCellchild->SetText(FText::FromString(Result)); 两种方法都可以,Printf更常用,尤其是当有多个参数时。 因此,我们提供两种方法供选择。 回答结构: 1. 直接给出用户要求的解决方案(FString拼接) 2. 给出另一种格式化方法(FString::Printf) 3. 简要说明推荐做法(使用FText::Format)的原因(本地化支持) 最后,生成相关问题。</think>### 在 Unreal Engine 中拼接整数与文本并显示在 UI 中的方法 #### 方法 1:使用 `FString::Printf` 格式化输出(推荐) ```cpp // 将整数 123 与固定文本拼接 FString Result = FString::Printf(TEXT("任务进度: %d"), 123); // 设置到 UI 文本控件 ic->TaskCellchild->SetText(FText::FromString(Result)); ``` - **`%d`**:整数格式化占- **优势**:支持复杂格式化(如浮点数用 `%.2f`),代码简洁高效[^1] #### 方法 2:直接拼接 `FString` ```cpp // 创建基础文本 FString BaseText = TEXT("任务进度: "); // 转换并拼接整数 FString Result = BaseText + FString::FromInt(123); // 设置到 UI ic->TaskCellchild->SetText(FText::FromString(Result)); ``` - **`FString::FromInt()`**:将整数转换字符串 - **`+` 运算符**:支持 `FString` 的高效拼接[^1] --- ### 关键区别说明 | **类型** | **可变性** | **内存开销** | **适用场景** | |----------|------------|--------------|--------------| | **`FString`** | 可修改/拼接 | 较高(独立存储) | 字符串操作/格式化 | | **`FText`** | 不可变 | 较低(共享存储) | UI 显示/本地化[^1] | | **`FName`** | 不可变 | 最低(索引存储) | 资源命名/标识符 | > ⚠️ 注意:在 UI 显示场景中,最终必须通过 `FText::FromString()` 将 `FString` 转换为 `FText`,因为 UE 的文本渲染系统基于 `FText` 实现本地化和安全引用[^1]。 --- ### 动态数据拼接示例 ```cpp // 动态整数变量 int32 CurrentProgress = GetMissionProgress(); // 带参数的格式化 FString DisplayText = FString::Printf( TEXT("任务进度: %d/%d"), CurrentProgress, MaxProgress ); // 更新UI ic->TaskCellchild->SetText(FText::FromString(DisplayText)); ``` --- ### 本地化最佳实践 若需支持多语言,应使用 `FText::Format`: ```cpp // 在本地化表中定义键值:"MISSION_PROGRESS" -> "Progress: {0}/{1}" FText FormatPattern = NSLOCTEXT("GameUI", "MISSION_PROGRESS", "Progress: {0}/{1}"); // 动态替换参数 FText ResultText = FText::Format( FormatPattern, FText::AsNumber(CurrentProgress), // 参数0 FText::AsNumber(MaxProgress) // 参数1 ); ic->TaskCellchild->SetText(ResultText); // 直接使用FText ``` - **优势**:自动适配语言规则(如千分隔符),无需手动转换数字格式[^1] ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值