我正在尝试使用strcat在一个有空格(ASCII代码= 32,更清楚的字符)的地方插入一个单词。
在C中有空格的地方可以插入单词吗?
let guild = client.guilds.get(serverID); //only works if bot is in the server with serverID as well
let user = guild.members.get(userID);
if (user) console.log("Tada, he is there");
在我看来,这应该有效,但实际上无效。我得到E0167类型的参数“ char”与类型“ char *”的参数不兼容。
我可以使用strcat进行此操作,还是有其他方法? 谢谢。
答案 0 :(得分:1)
因此,让我们首先分析您的程序。结果如下:
using namespace std;
应该避免。您可以在此处阅读许多关于原因的帖子char a[100];
这样的普通C样式数组不应在C ++中使用。它们很容易出错std::string
std::strlen
返回无符号类型std::size_t
strcat
不应使用。我的编译器甚至没有编译它。 strcat
带有纯C样式数组非常危险,通常会导致不确定的行为strcat
期望将char *
作为第一个元素。您正在给它一个char
strcat
并没有达到您的期望。它总是将第二个参数附加在字符串的 end 处。不在某个位置上strcat(&a[i], "test ");
,也不会在字符串的 end 处将“ test”插入位置i。如果您输入的字符串长度为100,且末尾有空格,则总是会导致灾难。i++
。始终使用++i
main
已定义为int
。它应该返回一个值,例如return 0;
因此,您的代码中存在很多问题
我们有以下类别的问题:
如何解决?由于我们仍然使用C语言,因此像David这样的专家应该给出答案,但是我会尽力而为。 2个解决方案:
因此,C风格解决方案的众多示例之一
#include <iostream>
#include <cstring>
int main()
{
// We want to work on a string with the maximum length of 0, including the terminating 0
constexpr size_t MaxStringSize = 10U;
// Here we will store the string in a C-Sytle char array
char myText[MaxStringSize];
// Now get the string from the user. Limit to a maximum length
std::cin.get(myText, MaxStringSize);
// We want to replace a space with the following text
const char* replaceText = "test ";
const size_t replaceTextLength = std::strlen(replaceText);
// Now, iterate over all characters in the string given by the user and replace spaces
for (size_t i = 0U; i < std::strlen(myText); ++i) {
// Check, if the current character is a space, because then we need to replace
if (myText[i] == ' ')
{
// We need space for the replacement text. So, we shift all characters at position i to the right
// Caveats. The string array has a maximum length. We must not shift over the border
if ((i + replaceTextLength +strlen(&myText[i])) < MaxStringSize) {
// make free space
std::memmove(&myText[i]+ replaceTextLength, &myText[i]+1, strlen(&myText[i])+1);
// Copy replacement text
std::memmove(&myText[i], replaceText, replaceTextLength);
}
}
}
// Show result to the user
std::cout << myText;
return 0;
}
现在是C ++解决方案。使用C ++标准库。
#include <iostream>
#include <string>
#include <regex>
int main() {
// Read a string from the user and check, if that operatrion was succesful
if (std::string line{}; std::getline(std::cin, line)) {
// Show text with replacements to the user
std::cout << std::regex_replace(line, std::regex(" "), "test ") << "\n";
}
return 0;
}
答案 1 :(得分:0)
Fatal error: Uncaught Twilio\Exceptions\RestException: [HTTP 401] Unable to fetch record: Authentication Error - invalid username in C:\xampp\htdocs\calls\vendor\twilio\sdk\src\Twilio\Version.php:86 Stack trace: #0 C:\xampp\htdocs\calls\vendor\twilio\sdk\src\Twilio\Version.php(111): Twilio\Version->exception(Object(Twilio\Http\Response), 'Unable to fetch...') #1 C:\xampp\htdocs\calls\vendor\twilio\sdk\src\Twilio\Rest\Api\V2010\Account\QueueContext.php(51): Twilio\Version->fetch('GET', '/Accounts/AP726...') #2 C:\xampp\htdocs\calls\agent\incomming.php(22): Twilio\Rest\Api\V2010\Account\QueueContext->fetch() #3 {main} thrown in C:\xampp\htdocs\calls\vendor\twilio\sdk\src\Twilio\Version.php on line 86
注意:最好使用单宽度字符代替宽字符(例如,将“ test”作为char)。如果您想这样做,程序可能会变得更加复杂。如果您考虑将空格字符替换为字符数组中的另一个字符作为字符串,这很简单。我搜索过堆栈溢出,可以将
#include <iostream> #include <cstring> // use cstring not string or you'll be unable to use strlen() function using namespace std; const int N = 100; int main(void) { char str[100]; cout << "Input a string: "; cin.get(str, N); for (int i = 0; i < strlen(str); i++) { if (str[i] == ' ') { str[i] = '_'; // change with your favorable char } } for (int j = 0; j < strlen(str); j++) { cout << str[j]; } cout << endl; return 0; }
替换为string
,也可以将string
替换为char
,但不能将char
(空格)替换为char
数组char
。